Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在多个Zip文件中连接多个文本文件_Python_Pandas_Zipfile - Fatal编程技术网

Python-在多个Zip文件中连接多个文本文件

Python-在多个Zip文件中连接多个文本文件,python,pandas,zipfile,Python,Pandas,Zipfile,我在使用pandas加载/连接压缩文件中的txt文件时遇到问题。这里有很多关于pd.concat(zip_file.open)的例子,但在我的例子中仍然没有任何效果,因为我有多个zip文件和多个txt文件 例如,假设我在一个特定文件夹“Main”中有两个压缩文件。每个压缩文件包含五个txt文件。我想阅读所有这些txt文件,并将它们全部放在一起。在我的真实示例中,我将有几十个zip文件夹,每个文件夹包含五个txt文件 你能帮忙吗 文件夹和文件结构,例如: 'C:/User/Example/Main

我在使用pandas加载/连接压缩文件中的txt文件时遇到问题。这里有很多关于pd.concat(zip_file.open)的例子,但在我的例子中仍然没有任何效果,因为我有多个zip文件和多个txt文件

例如,假设我在一个特定文件夹“Main”中有两个压缩文件。每个压缩文件包含五个txt文件。我想阅读所有这些txt文件,并将它们全部放在一起。在我的真实示例中,我将有几十个zip文件夹,每个文件夹包含五个txt文件

你能帮忙吗

文件夹和文件结构,例如:

'C:/User/Example/Main'   
   TAG_001.zip
     sample001_1.txt
     sample001_2.txt
     sample001_3.txt
     sample001_4.txt
     sample001_5.txt
   TAG_002.zip
     sample002_1.txt
     sample002_2.txt
     sample002_3.txt
     sample002_4.txt
     sample002_5.txt
我是这样开始的,但之后的一切都是错误:

import os
import glob
import pandas as pd
import zipfile

path = 'C:/User/Example/Main'

ziplist = glob.glob(os.path.join(path, "*TAG*.zip"))

这不是很有效,但它应该让你知道如何做到这一点

import os
import zipfile

import pandas as pd

frames = {}

BASE_DIR = 'C:/User/Example/Main'
_, _, zip_filenames = list(os.walk(BASE_DIR))[0]
for zip_filename in zip_filenames:
    with zipfile.ZipFile(os.path.join(BASE_DIR, zip_filename)) as zip_:
        for filename in zip_.namelist():
            with zip_.open(filename) as file_:
                new_frame = pd.read_csv(file_, sep='\t')
                frame = frames.get(filename)
                if frame is not None:
                    pd.concat([frame, new_frame])
                else:
                    frames[filename] = new_frame

#once all frames have been concatenated loop over the dict and write them back out

根据数据量,您必须设计一个平衡处理能力/内存/磁盘空间的解决方案。此解决方案可能会占用大量内存。

文件是否为熊猫可以读取的“csv”格式?是。他们用pd.read\u csv单独阅读。