有条件将文件从一个文件夹移动到另一个文件夹时出现问题

时间:2019-01-12 00:57:02

标签: python python-3.x csv directory

我在一个目录中有多个csv文件,我试图将它们拆分到两个不同的文件夹中。如果在任何列或行上都找到“ colname”,则将数据写入outpath1中的excel文件。如果找不到“ colname”,则将文件移至outpath2。我的以下代码在“如果不是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)

1 个答案:

答案 0 :(得分:1)

  

outpath2具有不具有“ 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_foundrow_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)