是否可以将代码应用于Python中zip文件中的所有txt文件?

问题描述 投票:0回答:1

我有一段代码,可以操作 txt 文件的数据,并用操作后的数据写入一个新的 csv 文件。原始文件没有标题,并且第 1 列包含不需要的数据。

该代码做了 3 件事:

  1. 删除 4 列中的两列
  2. 添加列标题
  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 文件?

python pandas csv zip txt
1个回答
0
投票

您可以通过运行脚本并使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.