Python 3.6文本清理脚本在Spyder正常,CMD及Ubuntu执行输出异常
嘿,我来帮你搞定这个跨环境运行的问题!你的脚本在Spyder正常但CMD和Ubuntu出问题,大概率是编码差异或者命令行参数传递的锅,结合你的代码片段,我整理了几个排查和解决方向:
1. 先补全你的Emoji正则(这可能是隐藏坑)
你贴的代码里emoji正则没写完(\U0001F6...),这会直接导致正则编译失败。先把正则补全成完整的版本,覆盖常见emoji范围,还要确保用Unicode模式:
import re import argparse import sys # 强制标准输出为UTF-8,解决终端编码不兼容问题 sys.stdout.reconfigure(encoding='utf-8') sys.stderr.reconfigure(encoding='utf-8') def main(data): if data.strip(): data = data.strip() # 完整的Emoji匹配正则 emoji_pattern = re.compile("[" u"\U0001F600-\U0001F64F" # 表情符号 u"\U0001F300-\U0001F5FF" # 符号&象形文字 u"\U0001F680-\U0001F6FF" # 交通&地图符号 u"\U0001F1E0-\U0001F1FF" # 国旗 "]+", flags=re.UNICODE) cleaned_data = emoji_pattern.sub(r'', data) print(cleaned_data) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('data', help='需要清理的文本内容') args = parser.parse_args() main(args.data)
2. 解决Windows CMD的编码问题
Windows CMD默认用GBK编码,而Python脚本默认输出UTF-8,处理含emoji的文本时会乱码或输出异常。解决步骤:
- 打开CMD后,先执行命令切换到UTF-8编码:
chcp 65001 - 再运行你的脚本(如果用的是Anaconda的Python,最好用完整路径调用,避免和系统Python混淆):
C:\你的Anaconda路径\python.exe clean_data.py "带emoji的测试文本😊"
3. 解决Ubuntu终端的编码/环境问题
Ubuntu下如果输出异常,先检查终端的编码设置:
- 执行
echo $LANG,确认输出是类似en_US.UTF-8的UTF-8编码; - 如果不是,先临时设置编码再运行脚本:
export LANG=en_US.UTF-8 python3 clean_data.py "测试文本😎"
另外,要确保你调用的python3是正确的3.6版本,执行python3 --version确认。
4. 排查Python环境差异
你机器上同时有系统Python和Anaconda Python,CMD或Ubuntu里调用的可能不是Spyder用的那个环境:
- Windows下执行
where python,看输出的路径是不是Anaconda的Python; - Ubuntu下执行
which python3,确认版本匹配;
如果路径不对,直接用Anaconda环境的Python完整路径运行脚本即可。
内容的提问来源于stack exchange,提问作者Shubham Chandra
相关产品推荐
相关产品推荐

