如何通过不同的 csv 文件迭代选择的操作并将结果输出到新的 csv 文件

Posted

技术标签:

【中文标题】如何通过不同的 csv 文件迭代选择的操作并将结果输出到新的 csv 文件【英文标题】:How to iterate chosen operation through different csv files and output the result to new csv files 【发布时间】:2021-12-09 16:28:22 【问题描述】:

我正在尝试使用 pandas 和 os 从所选目录中获取 CSV 文件并迭代地删除指定的行,因为它们是以我不喜欢的形式生成的。在迭代之后,我希望输出的 CSV 具有相同的名称+一个后缀,以表明迭代已经执行。

在长时间的中断之后,我将回到 Python,但这是我目前所拥有的:

DIR = 'Dummy_Folder/'

JV_suffix = "Current-Voltage Data.csv"
# For each file name in the chosen directory (DIR)
for filename in os.listdir(DIR):
    # If file name ends with chosen suffix perform...
    if filename.endswith(JV_suffix):
        # Read the original csv file InputName
        data = pd.read_csv(filename,header=None)
        # Defining the rows that we want to delete from the file
        trim = [0,1,2,len(data)-1,len(data)-2,len(data)-3]
        # Deleting these rows and defining new csv
        trim_data = data.drop(trim,axis=0) 
        # Making data frame with trimmed csv
        df = pd.DataFrame(trim_data)
        # Outputting df to CSV with suffix of '_number'
        df.to_csv('DIR/filename_'.format(filename),index=False)
    else:
        continue

当我在虚拟数据上运行它时,它会抛出错误 FileNotFoundError: [Errno 2] No such file or directory: 'Dummy_Current-Voltage Data.csv'

感谢您抽出宝贵时间阅读本文!

【问题讨论】:

尝试用data = pd.read_csv(os.path.join(DIR, filename),header=None)替换data = pd.read_csv(filename,header=None) 【参考方案1】:

这可能是您文件的相对路径的错误。

我认为您的文件夹 Dummy/ 位于 python 项目路径中。 如果正确找到文件夹,则文件夹内任何文件的正确相对路径应为Dummy/filename

您可以使用os.path.join(foldername,filename) 加入文件夹名和文件名。

【讨论】:

【参考方案2】:

感谢 qouify 和 Sam 的建议,这解决了问题,同时将输出 CSV 行更改为 df.to_csv('trimmed_'.format(filename),index=False)。我认为在文件名中包含 DIR 会导致问题。我附上下面的整个脚本,作为其他有类似查询的人的演示

import pandas as pd
import os, os.path

DIR = 'Dummy_Folder/'
# For each file name in the chosen directory (DIR)
for filename in os.listdir(DIR):
    # If file name ends with chosen suffix perform...
    if filename.endswith("Current-Voltage Data.csv"):
        # Read the original csv file
        data = pd.read_csv(os.path.join(DIR, filename),header=None)
        # Defining the rows that we want to delete from the file
        trim = [0,1,2,len(data)-1,len(data)-2,len(data)-3]
        # Deleting these rows and defining new csv
        trim_data = data.drop(trim,axis=0) 
        # Making data frame with trimmed csv
        df = pd.DataFrame(trim_data)
        df.to_csv('trimmed_'.format(filename),index=False)
    else:
        continue

【讨论】:

以上是关于如何通过不同的 csv 文件迭代选择的操作并将结果输出到新的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell - 从 csv 文件读取数据,比较特定列中的数据并将结果写入新文件

刮取网址的CSV列表并将结果输出到不同的CSV

在python中调用mysql存储过程并将结果写入csv文件

加快约 50GB CSV 文件的轻量级处理

批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录

如何根据特定列的值从 CSV 文件中选择值