我想做以下事情:
-
加载。txt文件
-
逐行执行并将特定单词更改为数字
-
按转换后的数字对行进行排序
-
显示原始行
def convert(word): if word == "data3": return "1" elif word == "data1": return "2" elif word == "data4": return "3" elif word == "data3": return "4" with open("file.txt", "r") as f: for num, line in enumerate(f.readlines(), 1): for word in line.split(): convert(word) sorted(word) print(line)
它确实制造了一些东西,但我看不出它制造了什么。我的。txt文件看起来像这样:
ABC ABC ABC Data1 ABC
ABC ABC ABC Data3 ABC
ABC ABC ABC Data2 ABC
ABC ABC ABC Data2 ABC
ABC ABC ABC Data3 ABC
和我愿意从中得到:所有的数据3,然后是数据1,然后是数据2,然后是数据4
ABC ABC ABC Data3 ABC
ABC ABC ABC Data3 ABC
ABC ABC ABC Data1 ABC
ABC ABC ABC Data2 ABC
ABC ABC ABC Data2 ABC
1。你的convert
函数没有return
任何值。给word
参数赋一个新值不会改变原来的值
def convert(word):
if word == "data3":
return "1"
if word == "data1":
return "2"
if word == "data4":
return "3"
if word == "data3":
return "4"
return word # return original if no match
或者更好的情况是,由于您是根据==
检查的相等性来替换每个单词的完全匹配,因此将每个搜索词及其替换作为键值对放在字典中。然后使用dict.get()
查找该单词,如果没有找到,则返回原始单词的默认值。
def convert(word):
return {
"data3": "1",
"data1": "2",
"data4": "3",
"data2": "4" # your `data3` repeats in the checks
# so this is probably `data2`
}.get(word.lower(), word) # "Data1" vs "data1"
2。你把sorted(word)
放在它自己的循环中,这样就可以对单词中的字母进行排序。此外,sorted返回已排序的元素,它不进行就地排序。所以你必须做new_word = sorted(convert(word))
。我不确定按转换后的数字排序行是什么意思,因为一行可以包含多个匹配的单词。(您还没有发布您希望所有行排序?(是的)file.txt
文件的示例或预期的输出。)您希望每行根据其单词排序还是
3。要对所有行进行排序,请使用sorted()
函数和key
参数(一个函数),sorted
使用该参数来确定顺序。我们将向这个函数(convert
)传递每行中的第四个单词(索引3)——我们通过拆分得到的单词。
with open("file.txt", "r") as f:
lines = f.readlines() # read all the lines
# print original lines
print(lines)
# or
# print('n'.join(lines))
# or
# for line in lines:
# print(line)
# same applies below
sorted_lines = sorted(lines, key=lambda words: convert(words.split()[3]))
# print sorted lines
print(sorted_lines)
输出:
['ABC ABC ABC Data3 ABC',
'ABC ABC ABC Data3 ABC',
'ABC ABC ABC Data1 ABC',
'ABC ABC ABC Data2 ABC',
'ABC ABC ABC Data2 ABC']