【问题标题】:Issue while moving files from one folder to another with condition将文件从一个文件夹移动到另一个文件夹时出现问题
【发布时间】:2019-01-12 00:57:02
【问题描述】:

我在一个目录中有多个 csv 文件,我试图将它们拆分到两个不同的文件夹中。如果在任何列或行中找到“colname”,则将数据写入 outpath1 中的 excel 文件。如果未找到“colname”,则将文件移动到 outpath2。我下面的代码工作正常,直到出现“if not row_found:”行,因为 outpath2 包含所有没有“colname”的文件,还有在行级别找到“colname”的文件。有没有办法解决这个问题或更好的方法来做到这一点?欢迎任何帮助。

for fname in os.listdir(root_dir):
    file_path = os.path.join(root_dir, fname)
    df = pd.read_csv(file_path)
    col_found = False
    if "colname" in df.columns:
       col_found = True
       df.to_excel(out_path)
       if not col_found:
       for n, row in enumerate(df.itertuples()):
                row_found = False
                for value in row:
                    if value == "colname":
                        row_found = True
                            df.to_excel(out_path)
                    if not row_found:
                        out_path2 = os.path.join(out_dir2, fname)
                            shutil.copy(file_path, out_path2)

【问题讨论】:

  • 您是否在共享代码 sn-p 之前的任何地方声明 row_title_found?似乎我们不知道这段代码可能有什么价值。共享整个相关代码可能会有所帮助。
  • 其实我的意思是row_found。
  • 您可能希望以不同的方式测试row_found 的条件。您的代码在这种情况下才起作用是什么意思?您期望会发生什么,而您会得到什么?

标签: python python-3.x csv directory


【解决方案1】:

outpath2 包含所有没有“colname”的文件,还有文件 其中“colname 在行级别找到”

这是因为 if not row_found 在循环 for value in row 内,为避免这种情况,请将 if 语句移到 for 循环之外:

row_found = False
for value in row:
    if value == "colname":
        row_found = True
        df.to_excel(out_path)
if not row_found:
    out_path2 = os.path.join(out_dir2, fname)
    shutil.copy(file_path, out_path2)

或者使用更简洁的方式,不需要col_found 也不需要row_found

for fname in os.listdir(root_dir):
    file_path = os.path.join(root_dir, fname)
    df = pd.read_csv(file_path)

    if "colname" in df.columns or "colname" in df.values:
        df.to_excel(out_path)
    else:
        out_path2 = os.path.join(out_dir2, fname)
        shutil.copy(file_path, out_path2)

【讨论】:

  • 嗨@borfo,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2021-08-28
相关资源
最近更新 更多