【问题标题】:Apply a written code to all CSV files across different folders using Python使用 Python 将编写的代码应用于不同文件夹中的所有 CSV 文件
【发布时间】:2020-02-25 18:48:28
【问题描述】:

我有大量的 CSV 文件,这些文件为我提供了多个系统每天产生的太阳能。每个 CSV 文件对应一个特定站点(我有 12 个站点)一年中的一天。

我的目标是开发一个代码来读取所有 CSV 文件(位于不同的文件夹中),提取每个特定日期和站点的每日产生的太阳能,将值存储在数据框中,最后导出每天收集的数据框在一个新的 Excel 文件中为所有站点产生太阳能。

到目前为止,我已经编写了代码来提取存储在同一文件夹中的所有 CSV 文件的值,这为我提供了该文件夹中存在 CSV 文件的所有日子产生的太阳能:

import csv
import pandas as pd
import numpy as np
import glob

path = r"C:\Users\XX\Documents\XX\DataLogs\NameofSite\CSV\2020\02\CSV\*.csv"
Monthly_PV=[]

for fname in glob.glob(path):
    df=pd.read_csv(fname, header=7, decimal=',')
    kWh_produced=df["kWh"]
    daily_start=kWh_produced.iloc[0]
    daily_end=kWh_produced.iloc[-1]
    DailyPV=daily_end-daily_start
    Monthly_PV.append(DailyPV)

print(Monthly_PV)
MonthlyTotal=sum(Monthly_PV)
Monthly_PV=pd.DataFrame(Monthly_PV)
print(MonthlyTotal)
Monthly_PV.to_excel(r"C:\Users\XXX\Documents\XXX\DataLogs\NameofSite\CSV\2020\02\CSV\Summary.xlsx")

我得到了我想要的结果:一个列表,其中每个值对应于这个给定文件夹中每个 CSV 的每日产生的太阳能,该文件夹位于我称为“路径”的文件夹中。我的目标是在此代码中添加一些内容,以便将开发的代码应用于位于先前文件夹中的 CSV 文件,以及此处列出的文件夹,或应用于同一更大文件夹中的并行文件夹。

任何提示将不胜感激。 谢谢!

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您可以添加一个额外的for 循环来处理路径列表

    import numpy as np
    import glob
    
    paths = [r"C:\Users\XX\Documents\XX\DataLogs\NameofSite\CSV\2020\02\CSV\*.csv",
        r"C:\Foo\*.csv",
        r"..\..Bar]*.csv"]
    
    Monthly_PV=[]
    
    for path in paths:
        for fname in glob.glob(path):
            df=pd.read_csv(fname, header=7, decimal=',')
            kWh_produced=df["kWh"]
            daily_start=kWh_produced.iloc[0]
            daily_end=kWh_produced.iloc[-1]
            DailyPV=daily_end-daily_start
            Monthly_PV.append(DailyPV)
    
    print(Monthly_PV)
    MonthlyTotal=sum(Monthly_PV)
    Monthly_PV=pd.DataFrame(Monthly_PV)
    print(MonthlyTotal)
    Monthly_PV.to_excel(r"C:\Users\XXX\Documents\XXX\DataLogs\NameofSite\CSV\2020\02\CSV\Summary.xlsx")
    

    【讨论】:

      【解决方案2】:

      如果您不想在程序中硬编码目录列表,也许可以尝试基于此的一些东西?

      def get_input_directories(depth: int, base_directory: str) -> typing.DefaultDict[str, typing.List[DeltaFile]]:
          """
          Build a dict with keys that are directories, and values that are lists of filenames.
      
          Does not include blocking uninteresting tracks.
          """
          result: typing.DefaultDict[str, typing.List[DeltaFile]] = collections.defaultdict(list)
      
          os.chdir(base_directory)
      
          try:
              for root, directories, filenames in os.walk('.'):
                  if root.count('/') != depth:
                      # We only want to deal with /band/album (for EG, with depth==2) in root
                      continue
                  assert not directories, f"root is {root}, directories is {directories}"
                  for filename in filenames:
                      if appropriate_extension(filename) and not hidden(filename):
                          result[root].append(DeltaFile(filename))
          finally:
              os.chdir('..')
      
          return result
      

      如果您不想要类型注释,可以安全地删除它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-28
        • 1970-01-01
        • 2016-10-15
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        相关资源
        最近更新 更多