にzip形式のCSVファイルを連結し、私のpython 3のコードです:Pythonの3.Xここ1、非圧縮csvファイル
import zipfile
import os
import time
from timeit import default_timer as timer
import re
import glob
import pandas as pd
# local variabless
# pc version
# the_dir = r'c:\ImpExpData'
# linux version
the_dir = '/home/ralph/Documents/lulumcusb/ImpExpData/Exports/92-95'
def main():
"""
this is the function that controls the processing
"""
start_time = timer()
for root, dirs, files in os.walk(the_dir):
for file in files:
if file.endswith(".zip"):
print("working dir is ...", the_dir)
zipPath = os.path.join(root, file)
z = zipfile.ZipFile(zipPath, "r")
for filename in z.namelist():
if filename.endswith(".csv"):
# print filename
if re.match(r'^Trade-Geo.*\.csv$', filename):
pass # do somethin with geo file
# print " Geo data: " , filename
elif re.match(r'^Trade-Metadata.*\.csv$', filename):
pass # do something with metadata file
# print "Metadata: ", filename
else:
try:
with zipfile.ZipFile(zipPath) as z:
with z.open(filename) as f:
# print("send to test def...", filename)
# print(zipPath)
with zipfile.ZipFile(zipPath) as z:
with z.open(filename) as f:
frame = pd.DataFrame()
# EmptyDataError: No columns to parse from file -- how to deal with this error
train_df = read_csv(f, index_col=None, header=0, skiprows=1, encoding="cp1252")
# train_df = pd.read_csv(f, header=0, skiprows=1, delimiter=",", encoding="cp1252")
list_ = []
list_.append(train_df)
# print(list_)
frame = pd.concat(list_, ignore_index=True)
frame.to_csv('/home/ralph/Documents/lulumcusb/ImpExpData/Exports/concat_test.csv', encoding='cp1252') # works
except: # catches EmptyDataError: No columns to parse from file
print("EmptyDataError...." ,filename, "...", zipPath)
# GetSubDirList(the_dir)
end_time = timer()
print("Elapsed time was %g seconds" % (end_time - start_time))
if __name__ == '__main__':
main()
それは主に動作します - それだけを1つに、すべてのzip形式のCSVファイルを連結しません。 1つの空のファイルがあり、すべてのcsvファイルは同じ行構造のすべてのcsvファイルを持つフィールド構造を持ちます。私はそれを実行したときに、ここで
は何スパイダーレポートです:
runfile('/home/ralph/Documents/lulumcusb/Sep15_cocncatCSV.py', wdir='/home/ralph/Documents/lulumcusb')
working dir is ... /home/ralph/Documents/lulumcusb/ImpExpData/Exports/92-95
EmptyDataError.... Trade-Exports-Chp-77.csv ... /home/ralph/Documents/lulumcusb/ImpExpData/Exports/92-95/Trade-Exports-Yr1992-1995.zip
/home/ralph/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py:688: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.
execfile(filename, namespace)
Elapsed time was 104.857 seconds
最終たcsvfileが処理された最後のzip形式のcsvファイルです。サイズはcsvファイルの変更、それはファイルを処理として
フィールドまたは列名がある
私は1つは、非圧縮CSVファイルにCONCATしたい圧縮ファイルで99件のCSVファイルがあります。 colmNamesは=
csvfilesにはラベルが付けられています:chp01.csv、["hs_code"、 "uom"、 "country"、 "prov"、 "value"、 "quatity" cht02.csvなどをchp99.csvに追加し、 "uom"(測定単位)を空にするか、hs_codeに応じて整数または文字列にします
質問:どのようにzip形式のc svファイルを1つの大きな(推定100 MBの圧縮されていない)csvファイルに連結するには?
追加の詳細: 私はcsvファイルを解凍しないようにしていますが、削除する必要があります。私はファイルを連結する必要があるため、私は追加の処理を行う必要があります。圧縮されたCSVファイルの解凍は実行可能なオプションです。私はそれをする必要はないと思っていました。
[OK]を、私は、供給されたシェルスクリプトが動作するようになりました。私が同じことをPythonでやりたければ、どうすればいいですか?他のstackoverflowアイテムはpandas concatに続いてpandas to_csvルートが動作することを示唆していますが、それは私のためではありません。私が逃した何かがありますか? – rspaans