如何读取文件夹中全部CSV文件并跳过无列的空文件?
解决读取CSV时的EmptyDataError问题
你遇到的EmptyDataError是因为空CSV文件没有可解析的列信息,导致pd.read_csv无法处理。以下两种修改方式可以跳过这类空文件:
方案一:提前过滤空文件
可以根据文件大小或内容提前筛选出有效文件,避免后续读取报错。这里提供两种过滤逻辑:
import os import glob import pandas as pd os.chdir('file_path') file_extension = '.csv' all_filenames = glob.glob(f"*{file_extension}") valid_files = [] for file in all_filenames: # 逻辑1:按文件大小过滤(针对你提到的1KB空文件) if os.path.getsize(file) > 1024: valid_files.append(file) # 逻辑2:更稳妥,检查文件实际内容是否为空(避免空文件大小超过1KB的情况) # with open(file, 'r') as f: # if f.read().strip(): # valid_files.append(file) # 合并所有有效CSV文件 df = pd.concat([pd.read_csv(t) for t in valid_files], ignore_index=True, sort=False, axis=0)
方案二:读取时捕获异常跳过
通过捕获EmptyDataError异常,直接跳过无法解析的空文件,这种方式能覆盖所有导致该错误的场景:
import os import glob import pandas as pd from pandas.errors import EmptyDataError os.chdir('file_path') file_extension = '.csv' all_filenames = glob.glob(f"*{file_extension}") dfs = [] for file in all_filenames: try: # 尝试读取文件 temp_df = pd.read_csv(file) dfs.append(temp_df) except EmptyDataError: # 捕获空文件异常,打印提示并跳过 print(f"跳过空文件:{file}") continue # 合并所有成功读取的DataFrame df = pd.concat(dfs, ignore_index=True, sort=False, axis=0)
两种方案对比:
- 方案一效率更高,提前过滤减少了读取操作;
- 方案二更健壮,能处理所有触发
EmptyDataError的文件(比如文件有内容但无有效列的情况)。
内容的提问来源于stack exchange,提问作者Michael Ferral
相关产品推荐
相关产品推荐

