python读写文件知识点

1、读写文件:


import os


os.path.join():单个文件和路径上的文件名的字符串作为参数,返回一个文件路径的字符串,包含正确的路径分隔符(其中双斜杠,因为每一个到斜杠需要转义)


os.getcwd():获取当前工作路径的字符串
os.chdir():改变当前工作路径函数


相对路径 和 绝对路径
相对路径:它相对于程序的当前工作目录
绝对路径:总是从跟文件开始


单个句点(.)用作文件夹目名称时,是”这个目录的缩写“
两个句点(..)意思是父文件夹


os.makedirs():创建新的文件夹






2、处理绝对路径和相对路径


调用函数os.path.abspath(path):将返回参数的绝对路径的字符串,这是将相对路径转化为绝对路径的简便方法


调用函数os.path.isabs(path):如果参数是一个绝对路径就返回True,如果参数是一个相对路径,就返回False


调用函数os.path.relpath(path,start):将返回从start路径到path的相对路径的字符串,如果没有提供start,就是用当前工作目录作为开始路径


调用函数os.path.dirname(path):将返回一个字符串,它包含path参数中最后一个斜杠之前的所有内容


调用函数os.path.basename(path):将返回一个字符串,它包含path参数中最后一个斜杠之后的所有内容


绝对路径的最后一个斜杠之前的是目录名称,之后是基本名称


如果需要同事获取一个路径的目录名称和基本名称,可以调用os.path.split(),获得这两个字符串的元组,或者分别调用os.path.dirname(path)和os.path.basename(path),将返回值放在元组内










>>> import os
>>> os.path.join('usr','bin','sqam')
'usr\\bin\\sqam'
>>> os.getcwd()
'C:\\Program Files (x86)\\Python36-32'
>>> os.makedirs('C:\\Users\\Nick\\Desktop\\python\\drawing\\1.doc')
>>> os.makedirs('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3\\4\\5\\6')
>>> os.path.abspath('.')
'C:\\Program Files (x86)\\Python36-32'
>>> os.path.isabs('.')
False
>>> os.path.isabs('C:\\Program Files (x86)\\Python36-32')
True
>>> os.path.relpath('C:\\Windows','C:\Program Files (x86)\Python36-32')
'..\\..\\Windows'
>>> path = 'C:\\Program Files (x86)\\Python36-32'
>>> os.path.dirname('C:\\Program Files (x86)\\Python36-32')
'C:\\Program Files (x86)'
>>> os.path.basename('C:\\Program Files (x86)\\Python36-32')
'Python36-32'
>>> os.path.split('C:\\Program Files (x86)\\Python36-32')
('C:\\Program Files (x86)', 'Python36-32')








3、查看文件大小和文件内容


调用os.path.getsize(path):将返回path参数中文件的字节数


调用os.listdir(path):将返回文件名字符串的列表,包含path参数中的每个文件




>>> os.path.getsize('C:\\Users\\Nick\\Desktop\\python\\drawing\\shapes.py')
0
>>> os.path.getsize('C:\\Users\\Nick\\Desktop\\python\\drawing\\colors.py')
2
>>> totalSize = 0
>>> for filename in os.listdir('C:\\Windows\\System32'):
    totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32',filename))
>>> print(totalSize)
1111588492








4、检查路径有效性


调用os.path.exists(path):如果path参数所指的文件或者文件夹存在,将返回True,否则返回False


调用os.path.isfile(path):如果path参数存在,并且是一个文件,将返回True,否则返回False


调用os.path.isdir(path):如果path参数存在,并且是一个文件夹,将返回True,否则返回False






>>> os.path.exists('C:\\Windows\\System32')
True
>>> os.path.exists('C:\\Windows\\System321')
False
>>> os.path.isfile('C:\\Windows\\System32')
False
>>> os.path.isdir('C:\\Windows\\System32')
True






5、文件读写过程


用open()函数打开一个文件,需要传递一个字符串路径(可以是绝对路径也可以是相对路径,)open函数返回的是一个File对象


File对象代表计算机中的一个文件,它只是Python中的另一类型的值


文件读取


通过File对象调用read()函数,读取文件内容,如果文件内容包含多行,返回字符串中通过“\n”分割
通过调用readlines()函数,返回一个字符串的列表,列表中的每一个字符串代表文件中的每一行,并且每一个字符串以\n结束




>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'123'
>>> openFile1 = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\2.txt')
>>> openFile1.read()
'123\n456\n789\n098\n765\n432\n1'
>>> openFile1.readlines()
['123\n', '456\n', '789\n', '098\n', '765\n', '432\n', '1']




文件写入


如果打开文件使用的是读模式,就不能写入文件,需要以“写入纯文本模式”或“添加纯文本模式”打开文件,或者简称为“写模式”和“添加模式”


写模式:将覆盖原有的文件,从头开始,就像用一个新值覆写一个变量的值,将‘w’作为第二个参数传递给open()函数,以写模式打开文件


添加模式:将在已有的文件的末尾添加文本,可以认为是向一个变量中的列表添加内容,而不是完全覆写该变量,将‘a'作为第二个参数传递给open()函数,以添加模式打开文件


如果传递给open()函数的文件名不存在,写模式和添加模式都会创建一个新的空文件,在读取和写入文件后,需要调用close()方法,然后才能再次打开该文件


写模式和添加模式均返回写入的字符数目


>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt','w')
>>> openFile.write('ABC')
3
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'ABC'
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt','a')
>>> openFile.write('12345678')
8
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'ABC12345678'
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3.txt','a')
>>> openFile.write('ABC\n12345678\n')
13
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3.txt')
>>> openFile.readlines()
['ABC\n', '12345678\n']








6、用shelve模块保存变量


利用shelve模块,可以将程序中的变量保存到二进制文件shelf中


要利用shelve模块读写数据,就必须先导入它,调用函数shelve.open()并传入一个文件名,然后将返回值保存在一个变量中,可以对这个变量的shelf值进行修改,就像它是字典一样,,然后在这个值上调用close()方法


就像字典一样,shelf值有keys()和alues()方法,返回shelf中的键和值类似于列表的值,因为这些方法返回类似列表的值,所以应该将他们传递给list()函数,取得列表的形式




>>> import shelve
>>> shelfeFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> cats = ['big','black','sex']
>>> shelfFile['cats'] = cats
>>> shelfFile.close()
>>> shelfFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> shelfFile['cats']
['big', 'black', 'sex']
>>> shelfFile.close()
>>> shelveFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> list(shelveFile['cats'])
['big', 'black', 'sex']
>>> shelfFile.close()




7、pprint.pformat()函数保存变量


pprint.pprint()将列表或字典中中的元素“漂亮打印”到屏幕上,而pprint.pformat()函数返回同样的文本字符串,但不是打印它,这个字符串不仅是易于阅读的,同样是语法上正确的Python代码


由于import导入的模块本身就是Python脚本,如果将pprint.pformat()的字符串保存为一个.py的文件,该文件就是一个可以导入的模块




>>> import os,pprint
>>> cats = [{'name':'Zophie','desc':'chubby'},{'name':'Pooka','desc':'fluffy'}]
>>> pprint.pformat(cats)
"[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"
>>> filrOne = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\myCats.py','w')
>>> filrOne.write('cats = '+pprint.pformat(cats)+'\n')
83
>>> filrOne.close()
>>> filrOne = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\myCats.py')
>>> filrOne.read()
"cats = [{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]\n"




由于import导入的模块本身就是Python脚本,如果将pprint.pformat()的字符串保存为一个.py的文件,该文件就是一个可以导入的模块









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章