我有一段代码,可以操作 txt 文件的数据,并用操作后的数据写入一个新的 csv 文件。原始文件没有标题,并且第 1 列包含不需要的数据。
该代码做了 3 件事:
import pandas as pd
file = pd.read_csv("example.txt", usecols=[0,1]) #to only get the first 2 columns
headerList = ['store', 'sku'] #name headers
file.to_csv("test.csv", header=headerList, index=False) #create new csv file headers
file = pd.read_csv("test.csv") #read new file including headers
file['store']=file['store'].str.split('R ').str[-1] #remove chars before str num
file['store']=file['store'].str.split(' -').str[0] #remove chars after str num
file.to_csv("test.csv", index=False) #updates the header file
一次处理一个文件很容易做到这一点,但我想将此代码应用于 zip 文件中格式相同但名称和数据不同的所有文件。 有没有办法创建一个循环来遍历 zip 中的每个文件来运行此代码并使用修改后的数据创建一个新的 zip 文件?
您可以通过运行脚本并使用
zipfile.ZipFile
打开并迭代 zip 文件的内容来实现此目的,从而提取每个文件。然后对于每个提取的文件,应用您的 pandas 数据操作代码。最后将修改后的数据保存到新的 CSV 文件并将其添加到新的 zip 文件中。
import pandas as pd
import zipfile
import os
input_zip_path = 'path_to_your_zip_file.zip'
output_zip_path = 'modified_data.zip'
def process_file(file_path):
df = pd.read_csv(file_path, usecols=[0, 1], header=None)
df.columns = ['store', 'sku']
df['store'] = df['store'].str.split('R ').str[-1]
df['store'] = df['store'].str.split(' -').str[0]
return df
with zipfile.ZipFile(input_zip_path, 'r') as zin, zipfile.ZipFile(output_zip_path, 'w') as zout:
for file_info in zin.infolist():
with zin.open(file_info) as f, open(file_info.filename, 'wb') as fout:
fout.write(f.read())
modified_df = process_file(file_info.filename)
modified_df.to_csv(file_info.filename, index=False)
zout.write(file_info.filename)
# Remove the temporary file
os.remove(file_info.filename)