Python 如何按升序对文件排序?
我有以下代码加入该文件,并尝试在将结果写入最终的.txt文件之前按升序对该文件进行排序。但它显示字符串对象没有属性Python 如何按升序对文件排序?,python,python-3.x,linux,sorting,Python,Python 3.x,Linux,Sorting,我有以下代码加入该文件,并尝试在将结果写入最终的.txt文件之前按升序对该文件进行排序。但它显示字符串对象没有属性 temp_list = '' with open('temp.txt') as f: out = [x for x in f.read().split("\n") if x.strip() != ""] for line1, line2 in list(zip(out, out[1:]))[::2]: line1 = line1 + ';' line2 = lin
temp_list = ''
with open('temp.txt') as f:
out = [x for x in f.read().split("\n") if x.strip() != ""]
for line1, line2 in list(zip(out, out[1:]))[::2]:
line1 = line1 + ';'
line2 = line2.split(' ')
line = ''
for x in range(1,len(line2)):
line = line + line2[x] + ' '
line = line[:-1] + '.'
temp_list += " ".join([line1, line]) + '\n'
temp_list.sort()
with open('new.txt' , 'w') as file:
file.write(temp_list)
temp.txt
line1 Ron likes apple; mango
line5 Ana likes lyche; apple
line21 Tyson likes football; VolleyBall
line6 Mike likes singing; dancing
line245 Stephen likes playing; sleeping
line95 Rose likes dancing; singing
这些行的顺序应该是
line1
line5
line6
line21
line95
line245
但不像
line1
line21
line245
line5
line6
line95
谢谢你的帮助
import re
with open("temp.txt", "r") as infile, open("new.txt", "w") as outfile:
lines = infile.readlines()
if not lines[-1].endswith("\n"):
lines[-1] = lines[-1] + "\n"
lines.sort(key=lambda x:int(re.findall(r"^[a-zA-Z]+(\d+)$", x.split()[0])[0]))
outfile.writelines(lines)
您可以使用re
尝试此操作。如果格式固定,则此操作将起作用
输入文本
罗恩喜欢苹果;芒果
line5 Ana喜欢lyche;苹果
21号线泰森踢足球;排球
第6行。。。。。。。。。。。。。。。。。。。。。。。。。。
第245行。。。。。。。。。。。。。。。。。。。。。。。
第95行。。。。。。。。。。。。
第11行。。。。。。。。。
第12行。。。。。。。。。。
第20行。。。。。。。。。。
输出文本
罗恩喜欢苹果;芒果
line5 Ana喜欢lyche;苹果
第6行。。。。。。。。。。。。。。。。。。。。。。。。。。
第11行。。。。。。。。。
第12行。。。。。。。。。。
第20行。。。。。。。。。。
21号线泰森踢足球;排球
第95行。。。。。。。。。。。。
第245行。。。。。。。。。。。。。。。。。。。。。。。
您可以使用re
尝试此操作。如果格式固定,则此操作将起作用
输入文本
罗恩喜欢苹果;芒果
line5 Ana喜欢lyche;苹果
21号线泰森踢足球;排球
第6行。。。。。。。。。。。。。。。。。。。。。。。。。。
第245行。。。。。。。。。。。。。。。。。。。。。。。
第95行。。。。。。。。。。。。
第11行。。。。。。。。。
第12行。。。。。。。。。。
第20行。。。。。。。。。。
输出文本
罗恩喜欢苹果;芒果
line5 Ana喜欢lyche;苹果
第6行。。。。。。。。。。。。。。。。。。。。。。。。。。
第11行。。。。。。。。。
第12行。。。。。。。。。。
第20行。。。。。。。。。。
21号线泰森踢足球;排球
第95行。。。。。。。。。。。。
第245行。。。。。。。。。。。。。。。。。。。。。。。
我没有真正的解决方案,但有一个变通方法。我会将所有行保存在字典中,然后只写这几行:
def sort_lines(your_dictionary):
temp_list = []
for i in range (1, len(your_dictionary)+1):
temp_list.append(your_dictionary[i])
return temp_list
如果您不确定是否每个数字都是从1到最高的,只需稍微更改一下:
def sort_lines(your_dictionary):
temp_list = []
for i in range (1, len(your_dictionary)+1):
try:
temp_list.append(your_dictionary[i])
except:
pass
return temp_list
我没有真正的解决办法,但有一个变通办法。我会将所有行保存在字典中,然后只写这几行:
def sort_lines(your_dictionary):
temp_list = []
for i in range (1, len(your_dictionary)+1):
temp_list.append(your_dictionary[i])
return temp_list
如果您不确定是否每个数字都是从1到最高的,只需稍微更改一下:
def sort_lines(your_dictionary):
temp_list = []
for i in range (1, len(your_dictionary)+1):
try:
temp_list.append(your_dictionary[i])
except:
pass
return temp_list
你可以用分类的
temp = [
"Line1 Ron likes apple; mango",
"line5 Ana likes lyche; apple",
"line21 Tyson play football; VolleyBall",
"line6 ..........................",
"line245 .......................",
"line95 ............",
]
def sort_fn(a):
idx = a.find(" ")
key_a = int(a[4:idx])
return key_a
sort = sorted(temp, key=sort_fn)
print(sort)
你可以用分类的
temp = [
"Line1 Ron likes apple; mango",
"line5 Ana likes lyche; apple",
"line21 Tyson play football; VolleyBall",
"line6 ..........................",
"line245 .......................",
"line95 ............",
]
def sort_fn(a):
idx = a.find(" ")
key_a = int(a[4:idx])
return key_a
sort = sorted(temp, key=sort_fn)
print(sort)
我有这样的想法:
with open('temo.txt','r') as f:
l1 = [l.lstrip('line').split(' ',1) for l in f.readlines()]
l2 = sorted([[int(a),b.strip()] for a,b in l1])
for s in l2:
print(f"line{s[0]} {s[1]}")
输出:
line1 Ron likes apple; mango
line5 Ana likes lyche; apple
line6 Mike likes singing; dancing
line21 Tyson likes football; VolleyBall
line95 Rose likes dancing; singing
line245 Stephen likes playing; sleeping
对于注释中提到的打印错误,请尝试以下操作:
print("line{} {}".format(s[0],s[1]))
我有这样的想法:
with open('temo.txt','r') as f:
l1 = [l.lstrip('line').split(' ',1) for l in f.readlines()]
l2 = sorted([[int(a),b.strip()] for a,b in l1])
for s in l2:
print(f"line{s[0]} {s[1]}")
输出:
line1 Ron likes apple; mango
line5 Ana likes lyche; apple
line6 Mike likes singing; dancing
line21 Tyson likes football; VolleyBall
line95 Rose likes dancing; singing
line245 Stephen likes playing; sleeping
对于注释中提到的打印错误,请尝试以下操作:
print("line{} {}".format(s[0],s[1]))
你所有的台词都以“Line”开头吗?@Hai Vu,是的..每一行都以linesee开头这回答了你的问题吗?你所有的台词都以“Line”开头吗?@Hai Vu,是的..每一行都以linesee开头这回答了你的问题吗?它抛出了一个错误,说“列表索引超出范围”,我在每一行都有相同的格式。我想在我修改问题后,根据数值对文件进行排序。。。请看一看,它抛出了一个错误,说“列表索引超出范围”,我在每一行都有相同的格式。我想在我修改问题后,根据数值对文件进行排序。。。请确保lookprint语句在linux中不起作用。但是,该代码在其他代码中起作用。我不想删去单词行,这将如何工作?任何关于Linux中print语句语法的想法都会导致它不允许使用“print()format@sri修正了;)print语句在linux中不起作用。但是,该代码在其他代码中起作用。我不想删去单词行,这将如何工作?任何关于Linux中print语句语法的想法都会导致它不允许使用“print()format@sri修正了;)