如何让python从导入的txt文件中检测字典中的空格?
好的,我这里的问题是,我把这个.txt文件Python导入到了一个字典中 它从文本文件中获取以下特定格式的值:如何让python从导入的txt文件中检测字典中的空格?,python,dictionary,translation,Python,Dictionary,Translation,好的,我这里的问题是,我把这个.txt文件Python导入到了一个字典中 它从文本文件中获取以下特定格式的值: a 0.01 b 0.11 c 1.11 d 0.02 ^(采用代码格式,因为它不会像在.txt中那样堆叠,而不是实际的代码) 然后把它们放进这样的字典里: d={'a':'0.01','b':'0.11,等..} 我使用它是为了将用户输入的任何值(稍后在脚本中)更改为字典中定义的任何值 问题是,如果我试图让它包含一个空间,它就是不起作用 比如,
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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Owatch/Documents/Python/Unisung Net Send/Input Encryption 0.02.py”,第17行,在
(键,val)=行。拆分()
ValueError:需要0个以上的值才能解包
编辑:谢谢大家投票否决!我现在不能再问问题了。
信不信由你,我确实知道这个网站的规则,并且在询问堆栈溢出之前做过研究。这对其他人也有帮助。多好的社区啊。希望回答的人没有投反对票。我很感激他们所做的一切 看来你实际上是在尝试这样做
In [177]: "a b".split()
Out[177]: ['a', 'b']
In [178]: " ".split()
Out[178]: []
i、 e.在执行split()时,保留一个空行,并希望保留空格,但这样做行不通
因此k,v=line.split()
将不起作用
编辑假设我理解问题所在
当您将值放入文件时,可能需要对其进行编码,然后在输出时进行解码
一种简单的方法可能是使用urrlib.quote
和urrlib.unquote
写在纸上
In [188]: urllib.quote(' ')
Out[188]: '%20'
这使得空间的特殊情况变得有点棘手,除非对写入文件的所有值都这样做
fd.write("%s %s\n" % (urllib.encode(val1), urllib.encode(val2)))
然后从文件中读取
k,v = map(urrlib.unquote, lines.split())
如果我理解正确的话,您试图将空格同时用作不带引号的值和分隔符,这是行不通的。我会使用
csv
模块及其报价规则。例如(假设您正在从print
函数中使用Python 3):
输入文件为
a 0.01
b 0.11
c 1.11
d 0.02
" " " "
给予
{' ': ' ', 'a': '0.01', 'b': '0.11', 'c': '1.11', 'd': '0.02'}
您是如何接受输入的?您需要显示代码。您仍然没有给出失败的案例。@ChrisMorgan您的意思是空间一定是失败的案例吗?我可以做些什么来解决这个问题?我建议您按照@DSM建议的做。
csv
模块涵盖了这些内容。您总是会遇到这样一个问题:您需要使用分隔符作为数据,并且它包含在csv
中。为了使它对输入中未替换的空白更加健壮:csv.reader((line.strip()表示f中的行),delimiter='')
我得到了以下结果:ValueError:dictionary update sequence元素#27的长度为5;2是RequiredWatch:那么你必须有一行有5个元素,这意味着你有一行有多个空格,你没有引用,比如这是一个坏例子,应该是这“是一个好例子”
。这是行吗?这不应该发生在我给出的代码中。我只是输入了你告诉我的内容,输入应该类似于“”,我只是感到困惑是的,这就是那一行。
{' ': ' ', 'a': '0.01', 'b': '0.11', 'c': '1.11', 'd': '0.02'}