-1

さて、ここで私が抱えている問題は、Pythonが辞書にインポートするこの.txtファイルを持っていることです。

これは、次の特定の形式のテキストファイルから値を取得することです。

a 0.01                   
b 0.11
c 1.11
d 0.02

^(実際にはコードではなく、.txtのようにスタックされないため、コード形式で)次に、次のような辞書に入れます。

d = {'a': '0.01'、'b': '0.11、ect ....}

さて、私はこれを使用して、ユーザーが入力した値(スクリプトの後半)を辞書内で定義された値に変更します。

問題は、スペースを組み込んでみてもうまくいかないことです。

同様に、私は.txt内の文字とそれに対応する値を完成させ、記号に進み始めました。

例えば:

& &
* * 

(辞書に入力すると、翻訳されたメッセージを印刷するときに対応する値が印刷されるように)(変更することもできますが、そのままにしておくことにしました)

ユーザー入力のスペースを、翻訳されたメッセージのスペースまたは別の値に対応させようとすると、問題が発生します。

.txtの行を空白のままにして、(スペース)が(スペース)になるようにしました

しかし、後で.txtを読み込もうとすると、「解凍するには複数の値が必要です」というエラーが表示されました。

誰かが私を助けることができますか?

編集:要求に応じてコードを追加します。

TRvalues = {}
with open(r"C:\Users\Owatch\Documents\Python\Unisung Net Send\nsed.txt") as f:
    for line in f:
        (key, val) = line.split()
        TRvalues[key] = val
if TRvalues == False:
    print("\n\tError encountered while attempting to load the .txt file")
    print("\n\t The file does not contain any values")
else:
    print("Dictionary Loaded-")

サンプルテキストファイル:

a 0.01
b 0.11
c 1.11
d 0.02
e 0.22
f 2.22
g 0.03
h 0.33
i 3.33
j 0.04
k 0.44
l 4.44
m 0.05
n 0.55
o 5.55
p 0.06
q 0.66
r 6.66
s 0.07
t 0.77
u 7.77
v 0.08
w 0.88
x 8.88
y 0.09
z 0.99

スクリプトを実行しようとすると、次のエラーが発生します。

Traceback (most recent call last):
  File "C:/Users/Owatch/Documents/Python/Unisung Net Send/Input Encryption 0.02.py", line 17, in <module>
    (key, val) = line.split()
ValueError: need more than 0 values to unpack

編集:みんなに反対票を投じてくれてありがとう!質問ができなくなりました。

信じられないかもしれませんが、私はこのWebサイトのルールを知っています。そして、StackOverflowに質問する前にこれを調査しました。他の人にも役立ちます。なんて素敵なコミュニティでしょう。うまくいけば、答えた人々はそれを否定しませんでした。彼らがしてくれたことに感謝します。

4

2 に答える 2

3

私が正しく理解していれば、引用符で囲まれていない値と区切り文字の両方としてスペースを使用しようとしていますが、これは機能しません。csvモジュールとその引用ルールを使用します。たとえば(print関数からPython 3を使用していると仮定):

import csv

with open('nsed.txt', newline='') as f:
    reader = csv.reader((line.strip() for line in f), delimiter=' ')
    TRvalues = dict(reader)

print(TRvalues)

の入力ファイルを使用

a 0.01
b 0.11
c 1.11
d 0.02
" " " "

与える

{' ': ' ', 'a': '0.01', 'b': '0.11', 'c': '1.11', 'd': '0.02'}
于 2013-02-17T13:05:55.443 に答える
0

あなたは実際にやろうとしているようです。

In [177]: "a b".split()
Out[177]: ['a', 'b']

In [178]: "  ".split()
Out[178]: []

つまり、空白行があり、split() を実行するときにスペースが保持されることを期待しますが、それは機能しません。

したがってk, v = line.split()、動作しません。

編集問題を理解していると仮定します。

おそらく、値をファイルに入れるときにエンコードし、途中でデコードする必要があります。

素朴なアプローチはurrlib.quoteurllib.unquote

書き込みについて。

In [188]: urllib.quote(' ')
Out[188]: '%20'

spaceこれにより、ファイルへの書き込み時にすべての値を処理しない限り、特殊なケースでは少し扱いに​​くくなります。

fd.write("%s %s\n" % (urllib.encode(val1), urllib.encode(val2)))

次に、ファイルからの読み取り。

k,v = map(urrlib.unquote, lines.split())
于 2013-02-17T12:53:34.190 に答える