【发布时间】:2020-09-11 02:14:59
【问题描述】:
我有一个使用 pandas 组合多个 ZIP 文件的 Python 脚本。我正在使用托管在 GitHub 存储库中的奥地利 COVID-19 病例数据:https://github.com/statistikat/coronaDAT
我试图让它在 GitHub 存储库中抓取目录结构(所有文件夹和子文件夹),识别 ZIP 文件,然后从 ZIP 文件中提取特定的 CSV 文件并组合 CSV。在这种情况下,将所有标题为“Bezirke.csv”的 CSV 文件合并为一个。
我有一个在当前工作文件夹中执行此操作的脚本的工作版本,但不会抓取目录结构或进入子文件夹。请参阅this 问题。
我现在正在尝试使用os.walk(rootPath) 来抓取结构。它似乎正在工作,但停止并显示错误消息:
Traceback (most recent call last):
File "merge_zip_entire_directory.py", line 21, in <module>
zip_file = ZipFile(filename)
File "/Users/matt/opt/anaconda3/lib/python3.7/zipfile.py", line 1240, in __init__
self.fp = io.open(file, filemode)
FileNotFoundError: [Errno 2] No such file or directory: '20200422_060000_orig_csv.zip'
我已验证该特定 zip 文件有一个名为“Bezirke.csv”的文件。我不明白为什么我会收到错误消息。
这是完整的脚本:
import fnmatch
import os
import pandas as pd
from zipfile import ZipFile
#set root path
rootPath = r"/Users/matt/OneDrive/Documents/04 Employment/Employers/State Department/COVID-19/test/"
#set file pattern
pattern = '*.zip'
#initialize variables
df_master = pd.DataFrame()
flag = False
#crawl entire directory in root folder
for root, dirs, files in os.walk(rootPath):
#filter files that match pattern of .zip
for filename in fnmatch.filter(files, pattern):
#
zip_file = ZipFile(os.path.join(root, filename))
for text_file in zip_file.infolist():
if text_file.filename.endswith('Bezirke.csv'):
df = pd.read_csv(zip_file.open(text_file.filename),
delimiter=';',
header=0,
index_col=['Timestamp'],
parse_dates=['Timestamp']
)
if not flag:
df_master = df
flag = True
else:
df_master = pd.concat([df_master, df])
#sort index field Timestamp
df_master.sort_index(inplace=True)
#print master dataframe info
print(df_master.info())
#prepare date to export to csv
frame = df_master
#export to csv
try:
frame.to_csv( "combined_zip_Bezirke.csv", encoding='utf-8-sig')
print("Export to CSV Successful")
except:
print("Export to CSV Failed")
【问题讨论】: