相对路径和绝对路径
绝对路径
从电脑的根目录开始到你文件的地址的叫做绝对路径
E:下载内容谷歌浏览器下载ASSSD_6751.zip
相对路径
相对于当前文件夹下的文件路径
./ASSSD_6751.zip
基本的文件操作
读取文件内容
Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。
file_path = 'read.txt' ##文件相对于当前文件的位置
r = open(file_path,'r') ## 'r'是只读模式
text = r.read()
print(text) # Hello World!
r.close()
还可以进行写入操作
file_path = 'read.txt' ##即使这个文件不存在,'w'模式下会帮你创建这个文件
w = open(file_path,'w') ## 'w'是只写操作,并且会覆盖原来的文件内容
w.write('Hi,my name is Gredae') # Hi,my name is Gredae ##文件里会显示这一段话
w.close()
还有一种写入方式是追加
file_path = 'read.txt' ##即使这个文件不存在,'a'模式下会帮你创建这个文件
w = open(file_path,'a') ## 'a'是追加操作,并不会覆盖原来的文件内容
w.write('Hi,my name is Gredae')
w.close()
但是,如果我们读取的是中文的话他就会报错
我们在read.txt
file_path = 'read.txt'
r = open(file_path,'r')
print(r.read())
r.close()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x8c in position 14: illegal multibyte sequence
发现报了一个编码错误,我们回头看下文件的编码格式:发现他的编码格式的utf-8格式的。
再回头看下错误说了什么:“gbk”编解码器无法在位置解码字节0x8c发现解码的时候是用“gbk”进行解码的。
这就像一个福建人在和广东人讲闽南话一样,怎么可能“听”得懂。
要解决这个问题就要讲一讲字符编码的事情了
字符编码
我们平时打开记事本写东西的时候它是在内存中编写的(不信的话可以试下在编写记事本文件的时候关机,他会提示你要不要保存),等我们按下保存的时候就会将内存里面的东西一股脑的都记录到你的硬盘里。但是我们内存里的编码格式是Unicode与硬盘里文件的编码格式不一样。所以便将Unicode的转码,转成我们设置成的编码格式,例如:UTF-8,GBK。
所以我们上面在读取文件的时候才会出现错误。我们只要把读取文件的时候告诉它使用什么编码格式进行读取文件就可以了。
file_path = 'read.txt'
r = open(file_path,'r',encoding='UTF-8')
print(r.read()) # 你好,世界!
r.close()
写入文件的时候也可以设置编码格式,只不过读取的时候也需要使用你保存时使用的编码格式。一般都是使用UTF-8格式。
其实,在一般的情况下是使用不到字符编码的,一般出现错误的时候需要解决的时候才会使用。只要记住使用什么编码存的文件,取得时候就用什么编码取,这样就不会编码错误的问题了。