У меня есть zip-файл, а внутри zip-файла есть ряд папок, которые, в свою очередь, содержат текстовые файлы. Как показано ниже.
zip1
- folder 1
- folder x
- file1.txt
- file2.txt
- folder y
- file3.txt
- file4.txt
- folder z
- file6.txt
- file7.txt
- folder 2
- folder m
- file9.txt
- file10.txt
- folder n
- file11.txt
- file12.txt
Я попытался извлечь содержимое текстового файла с помощью pandas на основе существующего решения , однако безуспешно. Zip-файл присутствует в ссылке.
Я также попытался извлечь содержимое текстового файла, используя приведенное ниже, но снова безуспешно.
df = pd.read_csv(textfile.zip, compression='zip')
Я хотел бы извлечь содержимое текстового файла, присутствующего в zip-файле, в фрейм данных pandas, а затем в csv, но вопрос в том, как я могу извлечь содержимое текстового файла в фрейм данных pandas из zip-файла без необходимости извлекать zip-файл явно?
Сначала используйте ZipFile.infolist() , чтобы вернуть zip_path/имя каждого файла, содержащегося в .zip, затем создайте словарь фреймов данных (фрейм данных для каждого .txt) и, наконец, сделайте pandas.concat, чтобы иметь один большой фрейм данных.
Попробуй это:
import pandas
from zipfile import ZipFile
zip_file = ZipFile(r"C:\Users\abokey\Downloads\data_new.zip")
dico_dfs_txt = {}
for file in zip_file.infolist():
if file.filename.endswith(".txt"):
temp_df = pd.read_csv(zip_file.open(file.filename), header=None)
temp_df.insert(0, "filename", file.filename)
dico_dfs_txt[file.filename] = temp_df
out= pd.concat(dico_dfs_txt, ignore_index=True)
display(out.head())
При необходимости вы можете использовать pandas.DataFrame.to_csv, чтобы сохранить необходимый объем данных в формате csv.