[英]How to read one file at a time from folder that contains multiple csv files in python
我有一个包含数百个 CSV 文件的文件夹。 如果存在列(检查酒列),我需要检查每个文件。 如果存在列,则将其保存在文件夹中而不做任何事情,如果列不存在,则添加列并将其保存在文件夹中。
问题是 python 代码正在读取多个 CSV 文件而不是一个 CSV 文件。 我无法编写仅读取一个文件的 python pandas 逻辑,检查列是否存在并保存在文件夹中。
输入文件1
A B C D E F Distance G H I J L K
0 05:58.0 0 2869421 1400.862536 0 0 0.777879166 0 1 7 5 test
输入文件2
A B C D E F Distance wine H I J L K
0 1/12/2021 4:05 0 2869421 15000 0 50 0.777879166 0 1 7 5 test2
如您所见,输入文件 1 的葡萄酒列不存在,因此我需要在其他输入文件 2 的葡萄酒列存在时进行一些操作,因此我不执行任何操作。
到目前为止,这是我循环浏览文件夹中文件的代码。 但是,这会遍历所有文件:
def main(path_csv,path_save, verbose):
if (".csv" in str(path_csv).lower()) and path_csv.is_file():
csv_files = [Path(path_csv)]
else:
csv_files = list(Path(path_csv).glob("*.csv"))
all_dfs_1 = pd.DataFrame()
for fn in csv_files:
all_dfs_1 = pd.read_csv(fn,header=0)
#print(all_dfs_1)
if 'wine' not in all_dfs_1.columns:
all_dfs_1.insert(all_dfs_1.columns.get_loc('Distance')+1,'wine','0')
all_dfs_1 = pd.DataFrame(all_dfs_1)
x = os.path.splitext(fn.name)[0]
all_dfs_1.to_csv(os.path.join(path_save,f"{x}.csv"),index=False)
如何一次只循环一个文件?
在此附上 Python 代码和文件
IIUC 更改最后 2 行的indentation
并删除all_dfs_1 = pd.DataFrame()
和all_dfs_1 = pd.DataFrame(all_dfs_1)
:
def main(path_csv,path_save, verbose):
if (".csv" in str(path_csv).lower()) and path_csv.is_file():
csv_files = [Path(path_csv)]
else:
csv_files = list(Path(path_csv).glob("*.csv"))
for fn in csv_files:
all_dfs_1 = pd.read_csv(fn,header=0)
#print(all_dfs_1)
if 'wine' not in all_dfs_1.columns:
all_dfs_1.insert(all_dfs_1.columns.get_loc('Distance')+1,'wine','0')
x = os.path.splitext(fn.name)[0]
all_dfs_1.to_csv(os.path.join(path_save,f"{x}.csv"),index=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.