在Python中合并两个文件并排序
我试图创建一个函数,在将结果写入新文件之前,将两个文本文件合并并排序。我已经阅读了关于文件排序的现有线程,以及关于合并文件的线程,但是我还没有找到一个能够回答我问题的线程在Python中合并两个文件并排序,python,Python,我试图创建一个函数,在将结果写入新文件之前,将两个文本文件合并并排序。我已经阅读了关于文件排序的现有线程,以及关于合并文件的线程,但是我还没有找到一个能够回答我问题的线程 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
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新手,因此如果您有任何帮助,我将不胜感激 以下是步骤:
>>> 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)
功能:
>>> 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)
正在尝试修复您的实现:
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)
请注意,如果您操作大文件,这并不是最佳选择…这里有一个基于
datetime
排序的替代方案(假设您将f1和f2的内容读入两个列表,l1和l2):
将打印
20:13:09: 1, 2, 3
15:16:05: 6, 2, 12
12:24:00: 14, 15, 16
08:06:02: 43, 54, 10
按时间排序?每一行包含时间,后跟3个整数值?是的,我必须编写一个函数,只对一个文件进行排序,然后使用“排序”函数根据前三个值(组成时间)进行排序。好的,我会在10到15分钟后给你。谢谢!当我将其写入另一个文件时,如何使其返回到被格式化为行的格式?写入时使用
'\n'.join(merge_list)