我在一个目录中有多个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)
答案 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_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)