(2022-01-06) Python学习笔记

〇〇一:  

2022.1.6  13:30

在linux下用惯了, 换到windows下,会有种种想不到的问题.比如昨天碰到的用read_csv读取文件报错,实际上是路径书写的问题.

错误信息一大堆:

---------------------------------------------------------------------------------------

---------------------------------------------------------------------------OSErrorTraceback (most recent call last)E:\Temp/ipykernel_2916/1776550767.pyin<module> 1importpandasaspd 2# 读取练习数据,文件路径为'./工作/test_data.csv',编码格式为'utf-8'----> 3 test_data=pd.read_csv('E:\Downloads\课程素材\工作\test_data.csv',encoding='utf-8') 4# 查看 test_data 5test_datad:\program files\python37\lib\site-packages\pandas\util\_decorators.pyinwrapper(*args, **kwargs) 309stacklevel=stacklevel, 310)--> 311 returnfunc(*args,**kwargs) 312 313returnwrapperd:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyinread_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options) 584kwds.update(kwds_defaults) 585--> 586 return_read(filepath_or_buffer,kwds) 587 588d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin_read(filepath_or_buffer, kwds) 480 481# Create the parser.--> 482 parser=TextFileReader(filepath_or_buffer,**kwds) 483 484ifchunksizeoriterator:d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin__init__(self, f, engine, **kwds) 809self.options["has_index_names"]=kwds["has_index_names"] 810--> 811 self._engine=self._make_engine(self.engine) 812 813defclose(self):d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin_make_engine(self, engine) 1038) 1039# error: Too many arguments for "ParserBase"-> 1040 returnmapping[engine](self.f,**self.options)# type: ignore[call-arg] 1041 1042def_failover_to_python(self):d:\program files\python37\lib\site-packages\pandas\io\parsers\c_parser_wrapper.pyin__init__(self, src, **kwds) 49 50# open handles---> 51 self._open_handles(src,kwds) 52assertself.handlesisnotNone 53d:\program files\python37\lib\site-packages\pandas\io\parsers\base_parser.pyin_open_handles(self, src, kwds) 227memory_map=kwds.get("memory_map",False), 228storage_options=kwds.get("storage_options",None),--> 229 errors=kwds.get("encoding_errors","strict"), 230) 231d:\program files\python37\lib\site-packages\pandas\io\common.pyinget_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options) 705encoding=ioargs.encoding, 706errors=errors,--> 707 newline="", 708) 709else:OSError: [Errno 22] Invalid argument: 'E:\\Downloads\\课程素材\\工作\test_data.csv'

-----------------------------------------------------------------------------------------------

最主要是最后一句: 

OSError: [Errno 22] Invalid argument: 'E:\\Downloads\\课程素材\\工作\test_data.csv'

前面复制的Windows文件夹路径是\\, 后面文件名前面的是我自己加上的\, 提醒我可能是路径格式问题.

根据参考网上查到一篇文章(见下),试了几种方法:

1)  r'E:\Downloads\课程素材\工作\test_data.csv'     -----OK

2)  'E:\\Downloads\\课程素材\\工作\\test_data.csv'  -----OK

3)  r'E:\\Downloads\\课程素材\\工作\\test_data.csv' -----OK

4)  r'E:\\Downloads\\课程素材\\工作\test_data.csv'  -----OK

5)  'E:/Downloads/课程素材/工作/test_data.csv'       -----OK

6)  r'E:/Downloads/课程素材/工作/test_data.csv'      -----OK

7)  r'E:\Downloads\\课程素材\/工作/test_data.csv'    -----OK

8)  'E:\Downloads\\课程素材\/工作/test_data.csv'     -----OK

9)  'E:\Downloads\\课程素材\/工作\/test_data.csv'     -----OK

10) 'E:\Downloads\\课程素材\/工作/\test_data.csv'    -----不行

11)  r'E:\Downloads\\课程素材\/工作/\test_data.csv'   -----OK


参考文献: 

问题的根本:windows读取文件可以用\,但在字符串里面\被作为转义字符使用,那么python在描述路径时有两种方式:

'd:\\a.txt',转义的方式

r'd:\a.txt',声明字符串不需要转义

这样就实现了python在windows系统中用\来访问,其实这样比较麻烦的是不是,下面对几种情况说明:

问题1:其实python中文件的绝对路径可以直接复制window的路径,

如:

C:\Users\Administrator\Desktop\python\source.txt  这个路径是没有问题的

但是,其实你的绝对路径正确,但是执行报错,那么就是你文件名的问题,如:

C:\Users\Administrator\Desktop\python\t1.txt  这个路径绝对会报错,因为 \t被转义了

python就会解析为 C:\Users\Administrator\Desktop\python 1.txt  这个时候肯定会报错的

若果你改成下面的写法就不会报错啦(推荐使用此写法“/",可以避免很多异常)

C:/Users/Administrator/Desktop/python/t1.txt

————————————————

版权声明:本文为CSDN博主「讲测试的古古奇老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jusulysunbeamy/article/details/51290080


〇〇二: 

2022.1.6  15:11

解决了路径格式的问题, 从网上下载的示例csv可以打开了, 但是我从EXCEL表格转出的csv还是报错.

错误信息: 

---------------------------------------------------------------------------UnicodeDecodeErrorTraceback (most recent call last)E:\Temp/ipykernel_2916/486158148.pyin<module> 1importpandasaspd 2# 读取练习数据,文件路径为'./工作/test_data.csv',编码格式为'utf-8'----> 3 test_data=pd.read_csv(r'I:\test_data.csv') 4# 查看 test_data 5test_datad:\program files\python37\lib\site-packages\pandas\util\_decorators.pyinwrapper(*args, **kwargs) 309stacklevel=stacklevel, 310)--> 311 returnfunc(*args,**kwargs) 312 313returnwrapperd:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyinread_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options) 584kwds.update(kwds_defaults) 585--> 586 return_read(filepath_or_buffer,kwds) 587 588d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin_read(filepath_or_buffer, kwds) 480 481# Create the parser.--> 482 parser=TextFileReader(filepath_or_buffer,**kwds) 483 484ifchunksizeoriterator:d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin__init__(self, f, engine, **kwds) 809self.options["has_index_names"]=kwds["has_index_names"] 810--> 811 self._engine=self._make_engine(self.engine) 812 813defclose(self):d:\program files\python37\lib\site-packages\pandas\io\parsers\readers.pyin_make_engine(self, engine) 1038) 1039# error: Too many arguments for "ParserBase"-> 1040 returnmapping[engine](self.f,**self.options)# type: ignore[call-arg] 1041 1042def_failover_to_python(self):d:\program files\python37\lib\site-packages\pandas\io\parsers\c_parser_wrapper.pyin__init__(self, src, **kwds) 67kwds["dtype"]=ensure_dtype_objs(kwds.get("dtype",None)) 68try:---> 69 self._reader=parsers.TextReader(self.handles.handle,**kwds) 70exceptException: 71self.handles.close()d:\program files\python37\lib\site-packages\pandas\_libs\parsers.pyxinpandas._libs.parsers.TextReader.__cinit__()d:\program files\python37\lib\site-packages\pandas\_libs\parsers.pyxinpandas._libs.parsers.TextReader._get_header()d:\program files\python37\lib\site-packages\pandas\_libs\parsers.pyxinpandas._libs.parsers.TextReader._tokenize_rows()d:\program files\python37\lib\site-packages\pandas\_libs\parsers.pyxinpandas._libs.parsers.raise_parser_error()UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbe in position 566: invalid start byte


最后一句提示可能是编码的问题.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbe in position 566: invalid start byte

难道excle转存的csv的默认编码格式不是UTF-8? 谷歌一查, 还真是, 默认是ANSI. ( https://zhidao.baidu.com/question/2014606813258805588.html )

在刚才语句后面加上encoding = 'ANSI' , 就可以正确打开csv了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容