python-3.x 用pandas阅读zip文件中包含的多个文件

xxe27gdn  于 2023-06-25  发布在  Python
关注(0)|答案(4)|浏览(136)

我有多个zip文件包含不同类型的txt文件。如下所示:

zip1 
  - file1.txt
  - file2.txt
  - file3.txt

如何使用pandas读取这些文件而不解压缩它们?
我知道如果它们是一个压缩文件,我可以使用read_csv压缩方法,如下所示:

df = pd.read_csv(textfile.zip, compression='zip')

任何帮助如何做到这一点将是伟大的。

enyaitl3

enyaitl31#

您可以将ZipFile.open()传递给pandas.read_csv(),以从打包成多文件zip的csv文件构造pandas.DataFrame

代码:

pd.read_csv(zip_file.open('file3.txt'))

将所有.csv读入dict示例:

from zipfile import ZipFile

zip_file = ZipFile('textfile.zip')
dfs = {text_file.filename: pd.read_csv(zip_file.open(text_file.filename))
       for text_file in zip_file.infolist()
       if text_file.filename.endswith('.csv')}
inkz8wg9

inkz8wg92#

最简单的处理方法(如果你有一个大的csv文件的多个部分压缩到一个zip文件)。

import pandas as pd
from zipfile import ZipFile

df = pd.concat(
    [pd.read_csv(ZipFile('some.zip').open(i)) for i in ZipFile('some.zip').namelist()],
    ignore_index=True
)
ebdffaop

ebdffaop3#

不久前,我在XML文件上遇到了类似的问题。zipfile模块可以帮助您实现这一目标。

from zipfile import ZipFile

z = ZipFile(yourfile)

text_files = z.infolist()

for text_file in text_files:
    z.read(text_file.filename)

如果你想把它们连接成一个pandas对象,那么它可能会变得有点复杂,但这应该是你的开始。注意,read方法返回字节,因此您可能还必须处理它。

jv4diomz

jv4diomz4#

对于zipfile中有空txt文件的用户:

from zipfile import ZipFile
z = ZipFile('textfile.zip')
df = pd.concat(
    [pd.read_csv(z.open(i.filename)) for i in z.infolist() if i.compress_size > 0],
    ignore_index=True)

否则,将出现“pandas.errors.EmptyDataError:将不显示要从文件“”中分析的列。

相关问题