Python-对字符串进行数字排序

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之后的下一条信息

我正在使用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]))

如果您在按每个条目的前四个字符对列表进行排序时遇到困难,请尝试以下方法:


我不完全确定你想用最后一部分实现什么——一个你在评论和详细信息文件中的例子,一个你希望一个条目在目的地中看起来像什么的例子,会很有用

能否提供输入文件和预期输出文件的简短片段