python-合并2个文本文件中的列表

时间:2018-11-19 12:46:34

标签: python python-3.x list

我是Python的新手。我想获取2个文本文件的内容,将它们转换为2个列表,将它们合并在一起,并按从小到大的顺序排序。

将它们转换为列表似乎很容易,但是我无法正确合并以进行排序。

它们像这样(列表列表而不是单个列表)出来:     ['[0,4,6,6,22,23,44]','[1,4,5,6,7,22,777]']

这是我的代码:

with open('numbers1.txt','r') as newfile1:
    list1 = newfile1.read().splitlines()
    print (list1)

with open('numbers2.txt','r') as newfile2:
    list2 = newfile2.read().splitlines()
    print (list2)

merged = []
for i in range(0, len(list1)) :
    merged.append(list1[i])
    merged.append(list2[i])
print(merged)

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先,要加入列表,您可以使用简单的+运算符:

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> merged = l1 + l2
>>> print(merged)
[1, 2, 3, 4, 5, 6]

现在可以使用python内置的sort()函数进行排序了:

  

Python列表具有内置的list.sort()方法,用于修改列表   到位。   默认情况下,sort()不需要任何其他参数。但是,   有两个可选参数:

     

reverse-如果为true,则将排序列表反转(或排序为   降序)

     

键-用作排序键的功能   比较

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> merged = l2 + l1
>>> print(merged)
[4, 5, 6, 1, 2, 3]
>>> merged.sort(key=int)
>>> print(merged)
[1, 2, 3, 4, 5, 6]

编辑

@Murray上面提到的解决方案可以很好地工作,但是它不适合您的用例,因为在文本文件中您具有类似字符串的列表:

  

这是numbers1.txt:[0、4、6、6、22、23、44],这是numbers2.txt:[1、4、5、6、7、22、777] – Murray 1小时以前

现在,当您以list1/list2格式读取文件时,实际上会得到一个包含一个元素的列表,该元素是字符串。

>>> with open("numbers1.txt", "r") as f:
...     print(list1)
...     print(type(list1))
...     print(len(list1))
...     print(type(list1[0]))
... 
['[0, 4, 6, 6, 22, 23, 44]']
<type 'list'>
1
<type 'str'>

为了从文件中追加这些数字,您需要首先解析它们。可以这样实现(取决于您的确切用例,最终解决方案可能会有所不同):

$ cat numbers1.txt 
[0, 4, 6, 6, 22, 23, 44]
$ cat numbers2.txt 
[1, 4, 5, 6, 7, 22, 777]
$ cat test.py 
files = ['numbers1.txt', 'numbers2.txt']
merged = []

for f in files:
    with open(f,'r') as lines:
        for line in lines:
            for num in line.rstrip().strip('[]').split(', '):
                merged.append(int(num))

print(merged)
merged.sort()
print(merged)
$ python test.py 
[0, 4, 6, 6, 22, 23, 44, 1, 4, 5, 6, 7, 22, 777]
[0, 1, 4, 4, 5, 6, 6, 6, 7, 22, 22, 23, 44, 777]
$ python3 test.py 
[0, 4, 6, 6, 22, 23, 44, 1, 4, 5, 6, 7, 22, 777]
[0, 1, 4, 4, 5, 6, 6, 6, 7, 22, 22, 23, 44, 777]

现在让我将这段代码分解为几段:

  1. 首先打开文件。我已经使用for循环完成了此操作,因此我不必每次想打开某项时都重复with open...(这更容易,代码更易读)。
  2. 从文件中读取所有行。 (我假设您的文件可以包含一行以上的字符串,如字符串)
  3. 解析每一行并追加到列表。
    • line.rstrip()-删除尾随换行符
    • .strip('[]')-从字符串中删除方括号
    • .split(', ')-按逗号和空格分隔字符串以获取字符串字符数组
    • merged.append(int(num))每个字符将其解析为int并追加到列表中。
  4. 最后但并非最不重要的排序列表。