14

我是一个新的 Python 用户。

我有一个 txt 文件,类似于:

3,1,3,2,3
3,2,2,3,2
2,1,3,3,2,2
1,2,2,3,3,1
3,2,1,2,2,3

但可能会更少或更多行。

我想将每一行作为列表导入。

我知道你可以这样做:

filename = 'MyFile.txt' 
fin=open(filename,'r')
L1list = fin.readline()
L2list = fin.readline()
L3list = fin.readline()

但由于我不知道我会有多少行,有没有另一种方法来创建单独的列表?

4

4 回答 4

26

不要创建单独的列表;创建列表列表:

results = []
with open('inputfile.txt') as inputfile:
    for line in inputfile:
        results.append(line.strip().split(','))

或者更好的是,使用csv模块

import csv

results = []
with open('inputfile.txt', newline='') as inputfile:
    for row in csv.reader(inputfile):
        results.append(row)

列表或字典是非常优越的结构,可以跟踪从文件中读取的任意数量的内容。

请注意,任一循环还允许您单独寻址数据行,而无需将文件的所有内容读入内存;而不是results.append()直接在那里处理那条线。

只是为了完整起见,这是一次性将 CSV 文件读入列表的单行紧凑版本:

import csv

with open('inputfile.txt', newline='') as inputfile:
    results = list(csv.reader(inputfile))
于 2013-08-26T16:41:20.303 回答
4

创建列表列表:

with open("/path/to/file") as file:
    lines = []
    for line in file:
        # The rstrip method gets rid of the "\n" at the end of each line
        lines.append(line.rstrip().split(","))
于 2013-08-26T16:42:09.037 回答
2
with open('path/to/file') as infile: # try open('...', 'rb') as well
    answer = [line.strip().split(',') for line in infile]

如果您希望数字为ints:

with open('path/to/file') as infile:
    answer = [[int(i) for i in line.strip().split(',')] for line in infile]
于 2013-08-26T16:53:46.950 回答
-1
lines=[]
with open('file') as file:
   lines.append(file.readline())
于 2013-08-26T16:55:00.627 回答