Python чтение CSV-файла в подпапке в заархивированной папке - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь сделать следующее:

import pandas as pd
loc = r'T:\Analysis\calibraer19.zip\col1\profiles\myfile.csv'
pd.read_csv(loc)

Но я получаю сообщение об ошибке "Файл не существует". Я не уверен, как читать этот файл, так как размер папки zip очень велик, и в нем сотни файлов, поэтому разархивирование не является хорошим вариантом.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вы можете попробовать следующий подход с модулем zipfile:

import zipfile

with zipfile.ZipFile("Desktop.zip") as z:
    data = z.read("pandas_test_data.csv").decode("utf-8-sig")

lines = (elem for elem in data.split("\r\n")) 

# lines = (elem for elem in data.split("\n")) if you're csv contains \n instead of \r\n

rows_of_data = (elem.split(",") for elem in lines)

df = pd.DataFrame(rows_of_data)

Вы считываете данные один раз, а затем просто создаете генераторы для последующих шагов. Генераторы могут использоваться конструктором класса pandas DataFrame.

Примечание. Я добавил decode("utf-8-sig"), поскольку при чтении файлов Zip я столкнулся с символами UTF-BOM.

1 голос
/ 20 января 2020

Вы можете использовать библиотеку zipfile для извлечения только файла, который вы хотите прочитать:

import zipfile

with zipfile.ZipFile(r'T:\Analysis\calibraer19.zip') as z:
    with open('myfile.csv', 'wb') as f:
        f.write(z.read(r'col1\profiles\myfile.csv'))

df = pd.read_csv('myfile.csv')
...