合并Python中的两个文件并进行排序

时间:2016-03-23 04:06:26

标签: python

我正在尝试创建一个组合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的新手,所以任何帮助都会受到赞赏!

3 个答案:

答案 0 :(得分:4)

以下是步骤:

  1. 读取文件,然后创建数据列表。
  2. 添加两个列表
  3. 如此排序的排序功能。
  4. 使用列表的反向方法
  5. 将内容写入文件。 (你可以这样做)
  6. <强>演示

    >>> 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