我是python的新手,现在我遇到了错误,不知道为什么会出现这个错误。
我有3个单词列表。列表包含单词数字,文字单词和字母数字单词。这些列表保存在txt文件中。每个文件都可以包含其他列表或新单词中的单词。
现在我想比较这些列表并将所有没有重复的单词复制到新列表中。所以我有一个大的列表,包含所有单词,但没有重复。
这是我的剧本:
file_a = raw_input("File 1?: ")
file_b = raw_input("File 2?: ")
file_c = raw_input("File_3?: ")
file_new = raw_input("Neue Datei: ")
def compare_files():
with open(file_a, 'r') as a:
with open(file_b, 'r') as b:
with open(file_c, 'r') as c:
with open(file_new, 'w') as new:
difference = set(a).symmetric_difference(b).symmetric_difference(c)
difference.discard('\n')
sortiert = sorted(difference, key=lambda item: (int(item.partition(' ')[0])
if item[0].isdigit() else float('inf'), item))
for line in sortiert:
new.write(line)
k = compare_files()
当我运行脚本时,我收到以下错误消息:
Traceback (most recent call last):
File "TestProject1.py", line 19, in <module>
k = compare_files()
File "TestProject1.py", line 13, in compare_files
sortiert = sorted(difference, key=lambda item: (int(item.partition(' ')[0])
File "TestProject1.py", line 14, in <lambda>
if item[0].isdigit() else float('inf'), item))
ValueError: invalid literal for int() with base 10: '12234thl\n'
我的剧本中有任何想法或错误的人吗?
感谢您的帮助:)
答案 0 :(得分:0)
partition
上的' '
或任何其他字符串不会提取字符串的数字部分,除非您知道紧跟数字后面的字符;非常不可能。
您可以改为使用正则表达式来提取字符串的前导数字部分:
import re
p = re.compile(r'^\d+')
def compare_files():
with open(file_a, 'r') as a, open(file_b, 'r') as b, \
open(file_c, 'r') as c, open(file_new, 'w') as new:
difference = set(a).symmetric_difference(b).symmetric_difference(c)
difference.discard('\n')
sortiert = sorted(difference,
key=lambda item: (int(p.match(item).group(0)) \
if item[0].isdigit() \
else float('inf'), item))
for line in sortiert:
new.write(line)
模式'^\d+'
应匹配字符串开头的所有数字,然后p.match(item).group(0)
将数字作为字符串返回,然后将转换为整数。