web-dev-qa-db-ja.com

txtファイルをインポートし、各行をリストとして持つ

私は新しい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()

しかし、行数がわからないので、個別のリストを作成する別の方法はありますか?

14
John

個別のリストを作成しないでください。リストのリストを作成します。

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

リストまたは辞書は、farファイルから読み取られたものの任意の数を追跡するための優れた構造です。

どちらのループでも、ファイルのすべての内容をメモリに読み込むことなく、データの行を個別にアドレス指定できることに注意してください。 results.append()を使用する代わりに、すぐにその行を処理します。

完全を期すために、CSVファイルを一度にリストに読み込む1行のコンパクトバージョンを次に示します。

_import csv

with open('inputfile.txt', newline='') as inputfile:
    results = list(csv.reader(inputfile))
_
26
Martijn Pieters

リストのリストを作成します。

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(","))
4
iCodez
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]
2
inspectorG4dget