Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让python从导入的txt文件中检测字典中的空格?_Python_Dictionary_Translation - Fatal编程技术网

如何让python从导入的txt文件中检测字典中的空格?

如何让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,等..} 我使用它是为了将用户输入的任何值(稍后在脚本中)更改为字典中定义的任何值 问题是,如果我试图让它包含一个空间,它就是不起作用 比如,

好的,我这里的问题是,我把这个.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
回溯(最近一次呼叫最后一次):
文件“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'}