如何通过不同的 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 文件读取数据,比较特定列中的数据并将结果写入新文件
在python中调用mysql存储过程并将结果写入csv文件