我有一个很大的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
我想创建一个列表列表,每个列表中有一行 我该怎么办?
答案 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")]