2017-04-19 66 views
2

我保存在我的道路熊貓:如何加載包含多個txt文件的zip文件?

  • mypath/data1.zip
  • mypath/data2.zip

每個ZIP文件包含三個不同txt文件很多zip文件。例如,在data1.zip有:

  • data1_a.txt
  • data1_b.txt
  • data1_c.txt

我需要加載datai_c.txt從每個壓縮文件(即data1_c.txtdata2_c.txtdata3_c.txt等)並將它們連接成一個數據幀。

不幸的是,我無法使用read_csv,因爲它只能用於單個壓縮文件。

任何想法如何做?謝謝!

回答

3

因此,您需要其他代碼才能訪問zip文件。下面是O'Reilly的的Python食譜修改後的代碼

import zipfile 
import pandas as pd 
## make up some data for example 
x = pd.DataFrame({"A": [1, 2], "B": [3, 4]}) 
x.to_csv('a.txt', sep="|", index=False) 
(x * 2).to_csv('b.txt', sep="|", index=False) 

with zipfile.ZipFile('zipfile.zip', 'w') as myzip: 
    myzip.write('a.txt') 
    myzip.write('b.txt') 
    for filename in z.namelist(): print 'File:', filename, 
     insideDF = pd.read_csv(StringIO(z.read(filename))) 
     df = pd.concat([df, insideDF]) 
print df 
+0

非常甜蜜的權利。這裏沒有任何東西寫在路徑上,對嗎? –

+1

正確。它直接從zip文件中讀取。我不知道在幕後,Python是使用臨時文件還是什麼,但從長遠來看沒有任何東西會被遺忘。 –

+0

奇怪我得到一個很長的輸出,比如'0 |||| -8267.36 | -8367.36 || 12.77 | 18.77 | 12.77 | -8785.3 | -8785.3 | -8785.3 |||| 1 |在'read_csv'中指定'sep ='|''後指定' '不存在'。有任何想法嗎?雖然 –

1

您是否希望patool庫的工作方式如下:使用read_csv如在一個DataFrame

import patool 
import pandas as pd 
compression = zipfile.ZIP_DEFLATED 
patoolib.extract_archive('mypath/data1.zip', outdir='mypath', interactive=False, verbosity=-1) 

店eachtxt文件: DF = pd.read_csv( 'mypath中/ data1_a')

然後使用pd.concat以任何您想要的方式連接數據幀。

+0

感謝,但我不希望存檔提取到的路徑。這會消耗我所有的磁盤空間。 –

+1

所以你想從檔案中提取一些特定的文件? – splinter

+0

我希望一切都發生在內存中(如果這是有道理的)。我不想在文件夾上寫任何東西 –

相關問題