从文件到列表中元组的字符串
Strings from files to tuples in list
我有一个如下所示的文本文件:
3 & 221/73 \\
4 & 963/73 \\
5 & 732/65 \\
6 & 1106/59 \\
7 & 647/29 \\
8 & 1747/49 \\
9 & 1923/49 \\
10 & 1601/41 \\
6 & 512 \\
我想将数字对加载到列表或字典中。
这是我目前的代码:
L = []
data1 = data.replace (" \\", " ")
data2 = data1.replace(" & "," ")
i=0
a=''
b=''
while data2[i] != None:
if(a==''):
while( data2[i] != '' ):
a=a+data2[i]
i = i + 1
while(data2[i] !=''):
b=b+data2[i]
i = i + 1
L.append((int(a),int(b)))
a=''
b=''
i=i+1
但这是我得到的错误:
"while( data2[i] != '' ): string out of range"
这是一个不太像 C 而看起来更像 python 的解决方案。在不确定输出应该是什么样子的情况下,第一个猜测让我想到了这个解决方案:
result = []
with open("test.txt") as f:
lines = f.readlines()
for l in lines:
l = l.replace('\', '')
elements = l.split("&")
elements = [x.strip() for x in elements]
result.append((int(elements[0]), elements[1]))
print result
这是输出:
[(3, '221/73'), (4, '963/73'), (5, '732/65'), (6, '1106/59'), (7, '647/29'), (8, '1747/49'), (9, '1923/49'), (10, '1601/41'), (6, '512')]
请注意,这缺少错误处理,因此如果文件不符合您的格式,这可能会引发异常。
我想你想用这样的东西替换 data2[i] != ''
和 data2[i] != None:
i < len(data2)
。
此外,您的代码将在 L.append((int(a),int(b)))
行失败,因为 221/73
不是有效的文字。
您几乎成功了,就像 提到的那样,您的条件语句是问题所在。文本文件不以 Python 中的 None
结尾,因此您不能执行 data2[i] != ''
和 data2[i] != None:
.
with open("data.txt") as f:
L=[]
for line in f:
line=line.replace(" \\\", "").strip() #Replace \\ and strip newlines
a,b=line.split(' & ') #Split the 2 numbers
L.append((int(a),b)) #Append as a tuple
此方法将输出您要求的元组列表:
>>> L
[(3, '221/73'), (4, '963/73'), (5, '732/65'), (6, '1106/59'), (7, '647/29'), (8, '1747/49'), (9, '1923/49'), (10, '1601/41'), (6, '512')]
注意: 在倒数第 3 行中,当您附加到 L
时,您在 b
变量上使用了 int()
。由于字符串的形式为 '221/73'
,因此它不是有效的整数。您可以拆分字符串和 int()
每个单独的数字,但随后它会拆分数字,这可能不是您想要的。
我有一个如下所示的文本文件:
3 & 221/73 \\
4 & 963/73 \\
5 & 732/65 \\
6 & 1106/59 \\
7 & 647/29 \\
8 & 1747/49 \\
9 & 1923/49 \\
10 & 1601/41 \\
6 & 512 \\
我想将数字对加载到列表或字典中。
这是我目前的代码:
L = []
data1 = data.replace (" \\", " ")
data2 = data1.replace(" & "," ")
i=0
a=''
b=''
while data2[i] != None:
if(a==''):
while( data2[i] != '' ):
a=a+data2[i]
i = i + 1
while(data2[i] !=''):
b=b+data2[i]
i = i + 1
L.append((int(a),int(b)))
a=''
b=''
i=i+1
但这是我得到的错误:
"while( data2[i] != '' ): string out of range"
这是一个不太像 C 而看起来更像 python 的解决方案。在不确定输出应该是什么样子的情况下,第一个猜测让我想到了这个解决方案:
result = []
with open("test.txt") as f:
lines = f.readlines()
for l in lines:
l = l.replace('\', '')
elements = l.split("&")
elements = [x.strip() for x in elements]
result.append((int(elements[0]), elements[1]))
print result
这是输出:
[(3, '221/73'), (4, '963/73'), (5, '732/65'), (6, '1106/59'), (7, '647/29'), (8, '1747/49'), (9, '1923/49'), (10, '1601/41'), (6, '512')]
请注意,这缺少错误处理,因此如果文件不符合您的格式,这可能会引发异常。
我想你想用这样的东西替换 data2[i] != ''
和 data2[i] != None:
i < len(data2)
。
此外,您的代码将在 L.append((int(a),int(b)))
行失败,因为 221/73
不是有效的文字。
您几乎成功了,就像 None
结尾,因此您不能执行 data2[i] != ''
和 data2[i] != None:
.
with open("data.txt") as f:
L=[]
for line in f:
line=line.replace(" \\\", "").strip() #Replace \\ and strip newlines
a,b=line.split(' & ') #Split the 2 numbers
L.append((int(a),b)) #Append as a tuple
此方法将输出您要求的元组列表:
>>> L
[(3, '221/73'), (4, '963/73'), (5, '732/65'), (6, '1106/59'), (7, '647/29'), (8, '1747/49'), (9, '1923/49'), (10, '1601/41'), (6, '512')]
注意: 在倒数第 3 行中,当您附加到 L
时,您在 b
变量上使用了 int()
。由于字符串的形式为 '221/73'
,因此它不是有效的整数。您可以拆分字符串和 int()
每个单独的数字,但随后它会拆分数字,这可能不是您想要的。