使用pandas读取txt文件报EmptyDataError:无列可解析问题求助
解决pandas读取txt文件时的EmptyDataError问题
嘿,我来帮你搞定这个问题!你说你创建了一个存储三个文件夹路径的列表,每个文件夹下有大量.txt文件,想把每个文件转成pandas DataFrame,但运行代码时遇到了报错。先看看你的代码和报错信息:
你的代码
for l in list: for root, dirs, files in os.walk(l, topdown=False): for name in files: #print(os.path.join(root, name)) df = pd.read_csv(os.path.join(root, name))
报错信息
Traceback (most recent call last): File "feature_drebin.py", line 18, in <module> df = pd.read_csv(os.path.join(root, name)) File "E:\anaconda\lib\site-packages\pandas\io\parsers.py", line 709, in parser_f return _read(filepath_or_buffer, kwds) File "E:\anaconda\lib\site-packages\pandas\io\parsers.py", line 449, in _read parser = TextFileReader(filepath_or_buffer, **kwds) File "E:\anaconda\lib\site-packages\pandas\io\parsers.py", line 818, in __init__ self._make_engine(self.engine) File "E:\anaconda\lib\site-packages\pandas\io\parsers.py", line 1049, in _make_engine self._engine = CParserWrapper(self.f, **self.options) File "E:\anaconda\lib\site-packages\pandas\io\parsers.py", line 1695, in __init__ self._reader = parsers.TextReader(src, **kwds) File "pandas/_libs/parsers.pyx", line 565, in pandas._libs.parsers.TextReader.__cinit__ pandas.errors.EmptyDataError: No columns to parse from file
问题分析
从报错信息和你描述的txt文件格式(每行是一个单独的条目,比如类似android.permission.INTERNET这类内容)来看,有两个核心问题:
- 部分.txt文件是空的,导致pandas找不到可解析的列结构
pd.read_csv默认按逗号分隔解析列,但你的文件没有逗号分隔符,自然识别不到有效列
解决方案
1. 先修正变量名,避免覆盖内置类型
不要用list作为变量名,它是Python的内置类型,会引发潜在问题,改成比如folder_paths:
folder_paths = ["你的第一个文件夹路径", "你的第二个文件夹路径", "你的第三个文件夹路径"]
2. 跳过空文件,适配你的txt格式读取
我们可以添加空文件检查,同时指定读取规则适配你的文件结构:
import os import pandas as pd folder_paths = ["路径1", "路径2", "路径3"] # 替换成你的实际文件夹路径 for folder in folder_paths: for root, dirs, files in os.walk(folder, topdown=False): for file_name in files: file_path = os.path.join(root, file_name) # 跳过空文件 if os.path.getsize(file_path) == 0: print(f"跳过空文件: {file_path}") continue # 读取txt文件,每行作为一条数据,自定义列名为features df = pd.read_csv(file_path, header=None, names=['features']) # 这里可以添加你对df的后续处理(比如合并、特征提取等) print(f"成功读取文件: {file_path},数据行数: {len(df)}")
补充:如果是key:value格式的txt文件
要是你的txt内容是key:value结构(比如permission: android.permission.INTERNET),可以指定分隔符拆分列:
df = pd.read_csv(file_path, sep=':', header=None, names=['key', 'value'])
内容的提问来源于stack exchange,提问作者ubuntu_noob
相关产品推荐
相关产品推荐

