使用循环打开和处理带有csv的txt文件
Using a loop to open and process txt files with csv
我有数据(txt 文件中的混合文本和数字),我想编写一个 for 循环来创建列表列表,这样我就可以使用更少的行来处理所有文件中的数据。
到目前为止我已经写了这个:
import csv
path = (some path...)
files = [path + 'file1.txt',path + 'file2.txt', path +
'file3.txt', ...]
for i in files:
with open(i, 'r') as j:
Reader = csv.reader(j)
List = [List for List in Reader]
我想我覆盖了 List
而不是创建嵌套列表,因为我得到了大小为 1 的 Reader
和一个包含其中一个文件维度的列表。
我的问题:
- 鉴于文件可能包含不同的行号,保存一些代码行是正确的做法吗? (还有什么可以做得更好?)
- 我认为问题出在
[List for List in Reader]
,有没有办法改变它,这样我就不会覆盖 List
?像添加到 List
?
是的,使用 .append()
:
import numpy as np
import matplotlib.pyplot as plt
import csv
path = (some path...)
files = [path+x for x in ['FILESLIST']]
for i in files:
with open(i, 'r') as j:
Reader = csv.reader(j)
List.append([L for L in Reader])
您可以使用列表 append()
方法添加到现有 list
。由于 csv.reader
个实例是可迭代对象,您可以将其中一个实例传递给方法,如下所示:
import csv
from pathlib import Path
path = Path('./')
filenames = ['in_file1.txt', 'in_file2.txt'] # etc ...
List = []
for filename in filenames:
with open(path / filename, 'r', newline='') as file:
List.append(list(csv.reader(file)))
print(List)
更新
一个更简洁的方法是使用一个叫做“list comprehension”的东西:
import csv
from pathlib import Path
path = Path('./')
filenames = ['in_file1.txt', 'in_file2.txt'] # etc ...
List = [list(csv.reader(open(path / filename, 'r', newline='')))
for filename in filenames]
print(List)
我有数据(txt 文件中的混合文本和数字),我想编写一个 for 循环来创建列表列表,这样我就可以使用更少的行来处理所有文件中的数据。
到目前为止我已经写了这个:
import csv
path = (some path...)
files = [path + 'file1.txt',path + 'file2.txt', path +
'file3.txt', ...]
for i in files:
with open(i, 'r') as j:
Reader = csv.reader(j)
List = [List for List in Reader]
我想我覆盖了 List
而不是创建嵌套列表,因为我得到了大小为 1 的 Reader
和一个包含其中一个文件维度的列表。
我的问题:
- 鉴于文件可能包含不同的行号,保存一些代码行是正确的做法吗? (还有什么可以做得更好?)
- 我认为问题出在
[List for List in Reader]
,有没有办法改变它,这样我就不会覆盖List
?像添加到List
?
是的,使用 .append()
:
import numpy as np
import matplotlib.pyplot as plt
import csv
path = (some path...)
files = [path+x for x in ['FILESLIST']]
for i in files:
with open(i, 'r') as j:
Reader = csv.reader(j)
List.append([L for L in Reader])
您可以使用列表 append()
方法添加到现有 list
。由于 csv.reader
个实例是可迭代对象,您可以将其中一个实例传递给方法,如下所示:
import csv
from pathlib import Path
path = Path('./')
filenames = ['in_file1.txt', 'in_file2.txt'] # etc ...
List = []
for filename in filenames:
with open(path / filename, 'r', newline='') as file:
List.append(list(csv.reader(file)))
print(List)
更新
一个更简洁的方法是使用一个叫做“list comprehension”的东西:
import csv
from pathlib import Path
path = Path('./')
filenames = ['in_file1.txt', 'in_file2.txt'] # etc ...
List = [list(csv.reader(open(path / filename, 'r', newline='')))
for filename in filenames]
print(List)