Ben yeni bir Python kullanıcısıyım.
Şöyle bir şey olacak bir txt dosyam var:
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
ancak daha az veya daha fazla satır olabilir.
Her satırı bir liste olarak içe aktarmak istiyorum.
Bunu böyle yapabileceğinizi biliyorum:
filename = 'MyFile.txt'
fin=open(filename,'r')
L1list = fin.readline()
L2list = fin.readline()
L3list = fin.readline()
ancak kaç satıra sahip olacağımı bilmediğim için, ayrı listeler oluşturmanın başka bir yolu var mı?
Ayrı listeler oluşturmayın; listelerden oluşan bir liste oluşturun:
results = []
with open('inputfile.txt') as inputfile:
for line in inputfile:
results.append(line.strip().split(','))
ya da daha iyisi, csv
modülünü kullanın:
import csv
results = []
with open('inputfile.txt', newline='') as inputfile:
for row in csv.reader(inputfile):
results.append(row)
Listeler veya sözlükler, bir dosyadan okunan rastgele sayıda şeyi takip etmek için çok daha üstün yapılardır.
Her iki döngünün de dosyanın tüm içeriğini belleğe okumak zorunda kalmadan veri satırlarını tek tek ele almanıza izin verdiğini unutmayın; results.append()
kullanmak yerine sadece o satırı orada işleyin.
Sadece bütünlük adına, işte bir CSV dosyasını tek seferde bir listeye okumak için tek satırlık kompakt sürüm:
import csv
with open('inputfile.txt', newline='') as inputfile:
results = list(csv.reader(inputfile))
Listelerden oluşan bir liste oluşturun:
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(","))
with open('path/to/file') as infile: # try open('...', 'rb') as well
answer = [line.strip().split(',') for line in infile]
Eğer sayıları int
olarak istiyorsanız:
with open('path/to/file') as infile:
answer = [[int(i) for i in line.strip().split(',')] for line in infile]