我正在尝试创建一个组合2个文本文件的函数,并在将结果写入新文件之前对它们进行排序。我已经阅读了有关排序文件的现有主题,以及有关合并文件的主题,但我还没有找到能够回答我问题的主题。
File1:
12:24:00: 14, 15, 16
20:13:09: 1, 2, 3
File2:
08:06:02: 43, 54, 10
15:16:05: 6, 2, 12
所需的输出将是:
NewFile:
20:13:09: 1, 2, 3
15:16:05: 6, 2, 12
12:24:00: 14, 15, 16
08:06:02: 43, 54, 10
我最初尝试将两个文件的内容合并到一个列表中,然后在将其写入新文件之前对其进行排序,但这似乎不起作用。这是我到目前为止所尝试的:
def mergeandsort(file1, file2, NewFile):
s1, s2, d=open(src1, 'r'), open(src2, 'r'), open(dst, 'w')
l=[]
l.append(list(s1))
l.append(list(s2))
n=sorted(l)
c=''.join(str(n))
d.write(c)
s1.close(); s2.close(); d.close()
我是Python的新手,所以任何帮助都会受到赞赏!
答案 0 :(得分:4)
以下是步骤:
<强>演示强>:
>>> p1 = '/home/vivek/Desktop/f1.txt'
>>> p2 = '/home/vivek/Desktop/f2.txt'
>>>
>>> fp1 = open(p1)
>>> fp2 = open(p2)
>>> l1 = fp1.read().strip().split("\n")
>>> l1
['12:24:00: 14, 15, 16', '20:13:09: 1, 2, 3']
>>> l2 = fp2.read().strip().split("\n")
>>> l2
['08:06:02: 43, 54, 10', '15:16:05: 6, 2, 12']
>>> l3 = l1+ l2
>>> l3
['12:24:00: 14, 15, 16', '20:13:09: 1, 2, 3', '08:06:02: 43, 54, 10', '15:16:05: 6, 2, 12']
>>> sorted(l3)
['08:06:02: 43, 54, 10', '12:24:00: 14, 15, 16', '15:16:05: 6, 2, 12', '20:13:09: 1, 2, 3']
>>> merge_list = sorted(l3)
>>> merge_list.reverse()
>>> merge_list
['20:13:09: 1, 2, 3', '15:16:05: 6, 2, 12', '12:24:00: 14, 15, 16', '08:06:02: 43, 54, 10']
>>>
<强>功能强>:
def mergeandsort(file1, file2, output):
fp1, fp2 = open(file1, 'r'), open(file2, 'r')
merge_data = fp1.read().strip().split("\n") + fp2.read().strip().split("\n")
merge_data = sorted(l3, reverse=True)
fp = open(output, 'w')
for i in merge_data:
fp.write(i)
fp.close()
return True, output
p1 = '/home/vivek/Desktop/f1.txt'
p2 = '/home/vivek/Desktop/f2.txt'
p3 = '/home/vivek/Desktop/f12.txt'
print mergeandsort(p1, p2, p3)
答案 1 :(得分:4)
尝试修复您的实施:
def mergeandsort(src1, src2, dst):
# Use `with` statements to close file automatically
with open(src1, 'r') as s1, open(src2, 'r') as s2, open(dst, 'w') as d:
l = list(s1) + list(s2)
l.sort(reverse=true) # Since you seem to want them in reverse order...
c = ''.join(l)
d.write(c)
请注意,如果您操作大文件,这不是最佳的......
答案 2 :(得分:2)
这是基于datetime
排序的替代方法(假设您将f1和f2的内容读入两个列表,l1和l2):
l1 = ['12:24:00: 14, 15, 16', '20:13:09: 1, 2, 3']
l2 = ['08:06:02: 43, 54, 10', '15:16:05: 6, 2, 12']
from datetime import datetime
for x in sorted(l1 + l2, key=lambda time_and_nums: datetime.strptime(time_and_nums.split(' ')[0][:-1], '%H:%M:%S'), reverse=True):
print(x)
将打印
20:13:09: 1, 2, 3
15:16:05: 6, 2, 12
12:24:00: 14, 15, 16
08:06:02: 43, 54, 10