Traceback (most recent call last): File "C:\Users\honey\Desktop\TXT_EXCEL\TXT_EXCEL.py", line 105, in <module> _df.to_excel(f'./{_path.stem}.xlsx', index=False, header=False) ^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'to_excel' Error reading file 9762IT.CTSM0V30_20230201_20230228.txt:'gb2312' codec can't decode byte 0xab in position 26923: illegal multibyte sequence
时间: 2023-11-13 12:09:54 浏览: 161
这个错误提示在第105行,说明是在将DataFrame转换为Excel文件时出现了错误。根据错误提示,可能是由于DataFrame为空导致的(即deal_txt返回了None)。根据deal_txt函数的代码,当读取文件出现错误时,会返回None。因此,你需要在主函数中对_df进行判断,只有当_df不为空时才进行转换为Excel文件的操作。
此外,根据错误提示,文件编码为'gb2312',但是在使用chardet.detect函数时,可能会出现误判的情况。因此,你可以在deal_txt函数中加入一个判断,如果检测到的编码不是'gb2312',就使用'gbk'编码进行读取。
修改后的代码如下:
```python
def deal_txt(path):
with open(path,'rb') as f:
result=chardet.detect(f.read())
try:
if result['encoding'] != 'gb2312':
df = pd.read_csv(path, sep='|', header=None, encoding='gbk' )
else:
df = pd.read_csv(path, sep='|', header=None, encoding=result['encoding'] )
except Exception as e:
print(f"Error reading file {path}: {e}")
return None
return df
for _path in Path('./').glob('*.txt'):
_df = deal_txt(_path)
if _df is not None:
_df.to_excel(f'./{_path.stem}.xlsx', index=False, header=False)
deal_style(f'./{_path.stem}.xlsx')
```
这样就可以避免出现空DataFrame转换为Excel文件的情况,同时对于文件编码不确定的情况也进行了处理。
阅读全文