Python-对字符串进行数字排序
我正在使用python将两个文件合并在一起以创建一个新文件,两个文件中的数据在每个字符串的开头都有一个id,我要对其进行排序,以便它们的顺序相同,可以合并。为此,我使用了.sort(),以便它们都按相同的顺序排列,并且注释与细节匹配。不过,我现在想重新排序,使他们去1,2,3,4。。。而不是1、10、100、1000、1001、1002等,但我遇到了一些困难,因为数字是字符串的开头,python不会将字符串的前四个字符转换为整数。如果有任何帮助,它也是一个以制表符分隔的文件,id之后的下一条信息是日期 任何想法都将受到赞赏,理想情况下我不想导入任何库 我的代码是:Python-对字符串进行数字排序,python,string,python-3.x,function,sorting,Python,String,Python 3.x,Function,Sorting,我正在使用python将两个文件合并在一起以创建一个新文件,两个文件中的数据在每个字符串的开头都有一个id,我要对其进行排序,以便它们的顺序相同,可以合并。为此,我使用了.sort(),以便它们都按相同的顺序排列,并且注释与细节匹配。不过,我现在想重新排序,使他们去1,2,3,4。。。而不是1、10、100、1000、1001、1002等,但我遇到了一些困难,因为数字是字符串的开头,python不会将字符串的前四个字符转换为整数。如果有任何帮助,它也是一个以制表符分隔的文件,id之后的下一条信息
comments = R'C:\Pythonfile\UFOGB_Comments.txt'
details = R'C:\Pythonfile\UFOGB_Details.txt'
mydest = R'C:\Pythonfile\UFOGB_sorted.txt'
with open(details,'rt') as src:
readdetails = src.readlines()
readdetails.sort()
with open(comments,'rt') as src:
readcomments = src.readlines()
readcomments.sort()
with open(mydest, 'w') as dest:
for i in range(len(readdetails)):
cutcomm = readcomments[i][readcomments[i].find('"'):]
dest.write('{}\t{}'.format(readdetails[i].strip('\n'),cutcomm))
您可以尝试使用以下命令将第一个字段解析为int:
readdetails.sort(key=lambda x: int(x.split()[0]))
如果所有行的格式都一致,这将很好地工作
否则,请使用更复杂的函数作为list.sort()的键函数,例如:
并将其传递给排序函数:
readdetails.sort(key=extract_id)
lines.sort(key=lambda s: int(s.split()[0]))
我试图根据你的解释重新创建你的数据。告诉我这是否正确:
lines = """
123 foobar
1000 foobar
432 foobar
22 foobar
987 foobar
""".strip().split('\n')
print(lines)
lines.sort(key=lambda s: int(s[:4]))
print(lines)
结果:
['123 foobar', '1000 foobar', '432 foobar', '22 foobar', '987 foobar'] # initial
['22 foobar', '123 foobar', '432 foobar', '987 foobar', '1000 foobar'] # final
我假设您的整数id限制为4位,正如您在OP中所说。如果id大小是可变的,您可以简单地替换排序函数:
readdetails.sort(key=extract_id)
lines.sort(key=lambda s: int(s.split()[0]))
如果您在按每个条目的前四个字符对列表进行排序时遇到困难,请尝试以下方法:
我不完全确定你想用最后一部分实现什么——一个你在评论和详细信息文件中的例子,一个你希望一个条目在目的地中看起来像什么的例子,会很有用 能否提供输入文件和预期输出文件的简短片段