【问题标题】:How to save multiple plotted csv files? FileNotFoundError: [Errno 2] No such file or directory [duplicate]如何保存多个绘制的 csv 文件? FileNotFoundError:[Errno 2]没有这样的文件或目录[重复]
【发布时间】:2021-07-15 12:12:42
【问题描述】:

我正在尝试绘制所有绘制的 csv 文件并将其保存在不同的文件夹中。这些文件夹位于我的工作目录中名为“Logs-Zip”的父文件夹中。它实际上适用于一个 csv 文件。但是,当我使用嵌套循环保存所有绘制的数字时,我得到一个错误。我使用os.listdir(os.path.join(path, folder)) 访问这些 csv 文件。运行后我得到第一个 csv 文件的保存图和

FileNotFoundError: [Errno 2] No such file or directory: 
'01WEA85069_2021-06-02_19-26-56_ST193.csv'. 

这个 csv 文件对应于迭代中的第二个 csv 文件。

所有 csv 文件都有相同的标题,这里是第一个:file

我可以读取如下文件名:

01WEA82849_2021-05-21_08-50-02_ST193.csv
01WEA85069_2021-06-02_19-26-56_ST193.csv
..

但我认为在第一个文件之后传递文件的路径有问题。我实际上错过了什么?提前致谢!

这是我的代码

import pandas as pd
import matplotlib.pyplot as plt
from numpy import sqrt
import os

try:
    path = r"C:\Users\aliha\PycharmProjects\nordex\Logs-Zip"

    for folder in os.listdir(path):
        for csv_file_name in os.listdir(os.path.join(path, folder)):

            data = pd.read_csv((csv_file_name), usecols=['$Time', 'TR_A_00', 'TR_A_01', 'TR_A_02', 'TR_A_07', 'TR_A_08'])

            v12 = data['TR_A_00']
            v23 = data['TR_A_01']
            v31 = data['TR_A_02']

            A = ((v12 ** 2) + (v23 ** 2) + (v31 ** 2)) / 2
            B = ((v12 ** 2) * (v23 ** 2) + (v23 ** 2) * (v31 ** 2) + (v31 ** 2) * (v12 ** 2)) / 2
            C = ((v12 ** 2) * (v12 ** 2) + (v23 ** 2) * (v23 ** 2) + (v31 ** 2) * (v31 ** 2)) / 4
            a = B - C
            M = (1 / sqrt(3)) * sqrt(A + sqrt(3) * a.apply(lambda x: (sqrt(x))))
            G = (1 / sqrt(3)) * sqrt(A - sqrt(3) * a.apply(lambda x: (sqrt(x))))

            df3 = pd.read_csv(csv_file_name)
            new_column = pd.DataFrame({'M': M, 'G': G})
            df3 = df3.merge(new_column, left_index=True, right_index=True)
            df3.to_csv((csv_file_name), index=False)

            data = pd.read_csv((csv_file_name),usecols=['$Time', 'TR_A_00', 'TR_A_01', 'TR_A_02', 'TR_A_07', 'TR_A_08', 'M', 'G'])

            df = pd.DataFrame(data, columns=['$Time', 'TR_A_00', 'TR_A_01', 'TR_A_02'])
            df1 = pd.DataFrame(data, columns=['$Time', 'M', 'G'])
            df2 = pd.DataFrame(data, columns=['$Time', 'TR_A_07'])
            df3 = pd.DataFrame(data, columns=['$Time', 'TR_A_08'])

            fig, axes = plt.subplots(nrows=4, ncols=1)
            fig.suptitle((csv_file_name))
            df.plot(ax=axes[0], grid=True, x='$Time', y=['TR_A_00', 'TR_A_01', 'TR_A_02'])
            df1.plot(ax=axes[1], grid=True, x='$Time', y=['M', 'G'])
            df2.plot(ax=axes[2], grid=True, x='$Time', y='TR_A_07')
            df3.plot(ax=axes[3], grid=True, x='$Time', y='TR_A_08')
            fig.tight_layout()
            plt.savefig(f'{csv_file_name}.png', dpi=150)

except ValueError:
    pass

【问题讨论】:

  • 如何列出文件中的文件?需要检查路径是不是目录
  • listdir 仅提供文件名,您必须将其与文件夹一起加入 - read_csv( os.path.join(path, folder, csv_file_name) )
  • 你至少可以显示错误except ValueError as ex: print(ex)。有一天你可能会遇到ValueError 的问题,你会想知道为什么程序在没有错误消息的情况下无法运行。
  • 你把同一个文件读了 3 次——这很浪费时间——但你只能读一次并使用很多次。

标签: python csv listdir


【解决方案1】:

常见错误。

listdir 仅提供文件名,您必须使用 joinfolder

        fullpath = os.path.join(path, folder, csv_file_name)

        data = pd.read_csv(fullpath)

【讨论】:

  • 谢谢@furas!我也会考虑你的笔记。
猜你喜欢
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2022-11-13
  • 2019-11-03
相关资源
最近更新 更多