Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中合并两个文件并排序_Python - Fatal编程技术网

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