-1

好的,我在这里遇到的问题是我有这个 .txt 文件 Python 导入字典。

它所做的是从文本文件中获取值,这些值是这种特定格式的:

a 0.01                   
b 0.11
c 1.11
d 0.02

^(以代码格式,因为它不会像在 .txt 中那样堆叠它,而不是实际代码),然后将它们放入这样的字典中:

d = { 'a':'0.01', 'b':'0.11, 等....}

好吧,我正在使用它,以便它将用户输入的任何值(稍后在脚本中)更改为字典中定义的任何值。

问题是如果我尝试让它包含一个空间,它就是行不通的。

就像,我完成了字母,以及它们在 .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

编辑:感谢大家投票!我现在已经不能提问了。

信不信由你,我确实知道这个网站的规则,并且在询问 Stack Overflow 之前做了研究。它对其他人也有帮助。多么美好的社区。希望回答的人没有投反对票。我很欣赏他们所做的。

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 回答