如何删除Mac上的.DS_Store文件并解决pandas读取CSV的UnicodeDecodeError
解决Mac下.DS_Store文件导致的CSV合并报错
报错根因
你遇到的UnicodeDecodeError是因为 macOS 会自动在目录下生成隐藏的.DS_Store文件存储文件夹视图配置,os.listdir()会读取到这个非CSV文件,pandas尝试用UTF-8解码二进制配置文件就会抛出编码错误。
方法1:删除当前目录已有的.DS_Store文件
打开终端,先切换到你的销售数据目录:
cd /Users/georgezambrano/Desktop/Code/Sales_Data
执行删除命令,仅删除目录内所有.DS_Store文件,不影响其他CSV数据:
find . -name ".DS_Store" -type f -delete
方法2:禁止该目录后续自动生成.DS_Store(可选)
如果不想后续再出现同类问题,执行以下命令禁止访达在该目录生成.DS_Store,之后重启访达生效:
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true killall Finder
方法3:代码层面过滤(更推荐,无需修改系统配置)
直接修改待处理文件列表的生成逻辑,仅筛选后缀为.csv的文件,从根源上避免读取到非CSV文件,哪怕后续目录新增其他无关文件也不会报错,修改后的代码如下:
import pandas as pd import os # 仅筛选csv文件 files = [file for file in os.listdir('/Users/georgezambrano/Desktop/Code/Sales_Data') if file.endswith('.csv')] all_months_data = pd.DataFrame() for file in files: df = pd.read_csv("/Users/georgezambrano/Desktop/Code/Sales_Data/"+file) all_months_data = pd.concat([all_months_data, df]) # head方法建议放在循环外执行,避免每次拼接都重复打印前5行 all_months_data.head()
内容的提问来源于stack exchange,提问作者George Zambrano
相关产品推荐
相关产品推荐

