Вам необходимо предоставить файлоподобный объект для csv.reader
.
Вероятно, лучшим решением, без необходимости использовать полный файл сразу, является этот подход (благодаря blhsing и damon за его предложение):
import csv
import io
import tarfile
tarFile = tarfile.open(name=tarFileName, mode="r")
for file in tarFile.getmembers():
csv_file = io.TextIOWrapper(tarFile.extractfile(file), encoding="utf-8")
reader = csv.reader(csv_file)
next(reader) # skip header
for row in reader:
print(row)
В качестве альтернативы возможное решение здесь: Python3 работа с CSV-файлами в tar-файлах будет
import csv
import io
import tarfile
tarFile = tarfile.open(name=tarFileName, mode="r")
for file in tarFile.getmembers():
csv_file = io.StringIO(tarFile.extractfile(file).read().decode('utf-8'))
reader = csv.reader(csv_file)
next(reader) # skip header
for row in reader:
print(row)
Здесь объект io.StringIO
используется, чтобы сделать csv.reader
счастливым. Однако это может плохо масштабироваться для больших файлов, содержащихся в tar, поскольку каждый файл читается за один шаг.