将大型txt文件导入Python并创建列表列表

时间:2017-10-28 19:29:34

标签: python list import

我有一个很大的txt文件。每一行都是这样的:

1. 27.01.1957 8,12,31,39,43,45  
2. 03.02.1957 5,10,11,22,25,27  
3. 10.02.1957 18,19,20,26,45,49  
4. 17.02.1957 2,11,14,37,40,45  
5. 24.02.1957 8,10,15,35,39,49  
6. 03.03.1957 24,26,31,35,43,47  
7. 10.03.1957 13,20,23,29,38,44

我想创建一个列表列表,每个列表中有一行 我该怎么办?

4 个答案:

答案 0 :(得分:1)

如果文件真的是 big ,您可能希望使用生成器来降低内存使用率:

def read_lines_from_big_file(path):
    with open(path) as fp:
        for line in fp:
            parts = line.split()
            yield parts  # -> ['1.', '27.01.1957', '8,12,31,39,43,45']

for split_line in read_lines_from_big_file(path):
    # do something with split_line

答案 1 :(得分:0)

要获取列表列表,其中每个子列表实际上是一个表示每个文件行的字符串,您可以执行此操作:

data = [];
with open("big_file.txt", 'r') as f:
    for line  in f:
        data.append([line.strip()])

此处程序逐行读取文件,并将文件中的每一行作为子列表附加到列表data

或者,如果您希望将子列表中的每个空格分隔元素作为单独的元素,请在附加行中使用split()

data.append(line.split())

将按空格拆分组件 - 删除额外的[],因为split()无论如何都会返回子列表。

答案 2 :(得分:0)

您可以定义自己的分隔符,以使用模块re https://docs.python.org/3/library/re.html分割字符串(或本例中的文件行)。使用with open()表示在代码中的with open()缩进结束后文件链接已关闭。

我在这里使用list comprehension,因为它比构建列表的for循环稍快一些

import re

def return_lines_split_by_choice(delimiters,path):
    re_pattern = '|'.join(map(re.escape,delimiters))
    with open(path) as file_handle:
        return [re.split(re_pattern,line.rstrip()) for line in file_handle]

my_list_of_lists = return_lines_split_by_choice((" ",","),my_filepath)

只需将您选择的分隔符或其他内容拆分为(" ",",")

结果是:

for sublist in my_list_of_lists:
    print (sublist)

['1.', '27.01.1957', '8', '12', '31', '39', '43', '45']
['2.', '03.02.1957', '5', '10', '11', '22', '25', '27']
['3.', '10.02.1957', '18', '19', '20', '26', '45', '49']
['4.', '17.02.1957', '2', '11', '14', '37', '40', '45']
['5.', '24.02.1957', '8', '10', '15', '35', '39', '49']
['6.', '03.03.1957', '24', '26', '31', '35', '43', '47']
['7.', '10.03.1957', '13', '20', '23', '29', '38', '44']

如果您只想要一个行列表,请使用此函数:

def list_of_lines(path):
    with open(path) as file_handle:
        return [line.rstrip() for line in file_handle]

就这样运行:

my_list_of_lists = list_of_lines(my_filepath)

如果您的python程序与txt文件位于同一文件夹中,那么您的文件路径就可以像文件名一样"mytxt.txt",否则您可以使用os模块规范化文件路径你的操作系统

答案 3 :(得分:-2)

学会让您的生活更轻松,不要使用with open。取而代之的是learn to use令人敬畏的pathlib package

使用pathlib.Path.read_text()方法,您可以将文件加载到字符串列表中,每个字符串都是一行:

import pathlib

text = pathlib.Path('myfile.txt').read_text()

要将其转换为行列表,请使用split方法,在每个换行符处拆分:

lines = text.split('\n')

几乎就在那里。现在您要制作列表清单。我假设你希望每个子列表由空格和逗号之间的东西组成。考虑到这一点,构建您的列表列表如下:

listoflists = []
for line in lines:
    listoflists.append(line.replace(',', ' ').split())

最后,按照以下步骤一起完成:

listoflists = [line.replace(",", " ").split() for line in pathlib.Path('myfile.txt').read_text().split("\n")]