TXT文件的python解析与特定条件



我想做以下事情:

  1. 加载。txt文件

  2. 逐行执行并将特定单词更改为数字

  3. 按转换后的数字对行进行排序

  4. 显示原始行

    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']

最新更新