Прочитайте содержимое текстового файла в фрейм данных pandas из zip-папки

У меня есть 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-файл явно?

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала используйте 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.

Другие вопросы по теме