Python学习笔记(五)——读写文件
2018-02-05 17:53
573 查看
文件与文件路径
window上的 ‘\’ 和 Linux与OS X 上的 ‘/’
window上的路径为:C:/Python/Python37/phoneAndEmail.py
OS X 和 Linux上的路径为:
usr/bin/spam
所以如果要使你的Python程序在各种系统上通用,在涉及文件目录的情况下可以使用
os.path.join(),这个函数会自动根据系统进行匹配
>>> import os >>> os.path.join('python','python37') 'python\\python37'
>>> myFile = ['acounts.txt','details.csv','invite.docx'] >>> for filename in myFile SyntaxError: invalid syntax >>> for filename in myFile: print(os.path.join('C:\\Users\\asweigart',filename)) #在print的输出下,显示为 C:\Users\asweigart\acounts.txt C:\Users\asweigart\details.csv C:\Users\asweigart\invite.docx
>>> for filename in myFile: os.path.join('C:\\Users\\asweigart',filename) #实际存储的字符串(这是由于转义字符的原因) 'C:\\Users\\asweigart\\acounts.txt' 'C:\\Users\\asweigart\\details.csv' 'C:\\Users\\asweigart\\invite.docx'
当前工作的目录
os.getcwd()查询现在工作文件夹
os.chdir('xxx')转到某个文件夹
>>> os.getcwd() 'C:\\Programs\\Python\\Python37' >>> os.chdir('D:') >>> os.getcwd() 'D:\\'
使用os.makedirs()
创建文件夹
>>> os.makedirs('D://123456')
处理绝对路径和相对路径
os.path.abspath('.')返回当前绝对路径
os.path.abspath('.\\123456')返回所选文文件的绝对路径
>>> os.path.abspath('.') 'D:\\' >>> os.path.abspath('.\\123456') 'D:\\123456' >>> os.path.isabs('.') False >>> os.path.isabs(os.path.abspath('.')) True
os.path.relpath(path,start)从
start到
path的相对路径
>>> os.path.relpath('C:\\windows','C:\\spam\\eggs') '..\\..\\windows' >>> os.path.relpath('C:\\windows','C:\\') 'windows'
>>> path = os.path.join(os.getcwd(),'Text.txt') >>> path 'D:\\python\\Text.txt' >>> os.path.basename(path) 'Text.txt' >>> os.path.dirname(path) 'D:\\python'
>>> os.path.split(path) ('D:\\python', 'Text.txt')
>>> os.path.sep '\\' >>> path.split(os.path.sep) ['D:', 'python', 'Text.txt']
查看文集大小和文件内容
os.path.getsize()文件,或者文件夹大小
os.listdir()文件夹下的项目
>>> os.path.getsize(path) 4096 #返回的单位是字节 >>> print('\n'.join(os.listdir(path))) def.py for.py random.py try.py 全局变量.py 字典题.py 引用调用.py
>>> for k in os.listdir(path): print(k + '\t' +str(os.path.getsize(os.path.join(path,k)))) def.py 149 for.py 466 random.py 68 try.py 405 全局变量.py 89 字典题.py 472 引用调用.py 84
检查路径的有效性
os.path.exists()文件或者文件夹是否存在
os.path.isdir()是否是文件夹
os.path.isfile()是否是个文件
>>> path 'D:\\python' >>> os.path.exists(path) True >>> os.path.isdir(path) True >>> os.path.isfile(path) False
文件的读写过程
用open()函数打开文件
>>> path 'D:\\python\\def.py' >>> openFile = open(path) >>> openFile <_io.TextIOWrapper name='D:\\python\\def.py' mode='r' encoding='cp936'>
读取文件内容
>>> openContent = openFile.read() >>> print(openContent) def hello(k): print(str(k)+'\n') k = k + 1 return k k = 0; k = hello(k) k = hello(k) for i in range(10): k = hello(k) #返回的是字符串 >>> openFile.readlines() ['def hello(k):\n', " print(str(k)+'\\n')\n", ' k = k + 1\n', ' return k\n', ' \n', 'k = 0;\n', 'k = hello(k)\n', 'k = hello(k)\n', 'for i in range(10):\n', ' k = hello(k)\n'] #返回的是列表
写文件
>>> wFile = open(path,'w') #创建文件 >>> wFile.write('Hello World!\n') #在文件中写内容 13 >>> wFile.close()
open(path,'a')以追加的方式写入
>>> wFile = open(path,'a') >>> wFile.write('from' + path) 22 >>> wFile.close()
用shelve模块保存变量
>>> shelfFile = shelve.open('mydata') >>> cats = ['Zophie','Pooka','Simon'] >>> shelfFile['cats'] = cats >>> shelfFile.close()
会产生三个文件
>>> sFile = shelve.open('mydata') >>> print(sFile['cats']) ['Zophie', 'Pooka', 'Simon'] >>> sFile['cats'][1] = 'Temp' >>> print(sFile['cats']) ['Zophie', 'Pooka', 'Simon'] >>> shelfFile.close()
怎么会无法修改?
其实很简单,
Temp没有写回,你把
['Zophie', 'Pooka', 'Simon']存到了
cats,当你再次读取
sFile['cats']的时候,
sFile['cats']只是一个拷贝,而你没有将拷贝写回,所以当你再次读取
sFile['cats']的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量
>>> sFile = shelve.open('mydata') >>> temp = sFile['cats'] >>> temp ['Zophie', 'Pooka', 'Simon'] >>> temp[1] = 123 >>> sFile['cats'] = temp >>> sFile['cats'] ['Zophie', 123, 'Simon'] >>> sFile.close()
用法和字典类似
>>> sFile = shelve.open('mydata') >>> list(sFile.keys()) ['cats'] >>> list(sFile.values()) [['Zophie', 123, 'Simon']] >>> list(sFile.items()) [('cats', ['Zophie', 123, 'Simon'])] >>> sFile.close()
使用pprint.pformat()函数保存变量
>>> import pprint >>> cats = [{'name':'Zophie','desc':'chubby'},{'name':'Pooka','desc':'fluffy'}] >>> pprint.pformat(cats) "[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]" >>> fileObg = open('myCats.py','w') >>> fileObg.write('cats = ' + pprint.pformat(cats)+'\n') 83 >>> fileObg.close()
>>> import myCats >>> myCats.cats [{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}] >>> myCats.cats[0] {'desc': 'chubby', 'name': 'Zophie'} >>> myCats.cats[0]['name'] 'Zophie'
小实验——生成随机的测验试卷文件
#! python3 import random capitals = {'山西':'太原', '河北':'石家庄', '辽宁':'沈阳', '吉林':'长春', '黑龙江':'哈尔滨', '江苏':'南京', '安徽':'合肥', '山东':'济南', '浙江':'杭州', '江西':'南昌', '福建':'福州', '湖南':'长沙', '湖北':'武汉', '河南':'郑州', '广东':'广州', '广西壮族自治区':'南宁', '海南':'海口', '贵州':'贵阳', '云南':'昆明', '四川':'成都', '陕西':'西安', '甘肃':'兰州', '宁夏回族自治区':'银川', '青海':'西宁', '新疆维吾尔自治区':'乌鲁木齐', '西藏自治区':'拉萨', '台湾省':'台北', '北京':'北京', '上海':'上海', '天津':'天津', '重庆':'重庆', '香港':'香港', '澳门':'澳门'} #随机出5份试卷 for quizNum in range(5): #创建文件 quizFile = open('试卷%s.txt'%(quizNum+1),'w') answerFile = open('答案%s.txt'%(quizNum+1),'w') #文件表头 quizFile.write('Name:\nData:\nPeriod:\n\n') quizFile.write((' '*20)+'试卷%s'%(quizNum+1)) quizFile.write('\n\n') answerFile.write((' '*20)+'试卷%s'%(quizNum+1)) answerFile.write('\n\n') #生成试题 states = list(capitals.keys()) random.shuffle(states) #创建选择答案选项 for questionNum in range(33): Answer = capitals[states[questionNum]] wrongAnswer = list(capitals.values()) del wrongAnswer[wrongAnswer.index(Answer)] wrongAnswer = random.sample(wrongAnswer,3) answerOption = wrongAnswer + [Answer] random.shuffle(answerOption) quizFile.write('%s.What is the capital of %s?\n' %(questionNum+1,states[questionNum])) for i in range(4): quizFile.write(' %s. %s\n'%('ABCD'[i],answerOption[i])) quizFile.write('\n') answerFile.write(' %s.%s\t'%(questionNum+1,'ABCD'[answerOption.index(Answer)])) if((questionNum+1) % 5 == 0): answerFile.write('\n') quizFile.close() answerFile.close() print('试卷'+str(quizNum+1)+'生成')
小实验——多重剪贴板
#! python3 # mcb.py - Save and loads pieces of text to the clipboard # Usage: mcb.pyw save <key> - Save clipboard to keyworld # mcb.pyw <key> - Loads keyworld to clipboard # mcb.pyw list - Loads all keyworld to clipboard # mcb.pyw del <key> - del keyworld # mec.pyw del - del all key world #Author : qmeng #MailTo : qmeng1128@163.com #QQ : 1163306125 #Blog : http://blog.csdn.net/Mq_Go/ #Create : 2018-02-06 #Version: 1.0 import sys,pyperclip,shelve mcbShelf = shelve.open('mcb') # TODO:Save and del clipboard content. if len(sys.argv) == 3: if sys.argv[1].lower() == 'save': mcbShelf[sys.argv[2]] = pyperclip.paste() elif sys.argv[1].lower() == 'del': if sys.argv[2] in mcbShelf.keys(): del mcbShelf[sys.argv[2]] print(sys.argv[2] + '删除成功') else: print('没有'+sys.argv[2]+'项') # TODO:List keywords and load cintent or del all keyworlds. if len(sys.argv) == 2: if sys.argv[1].lower() == 'list': pyperclip.copy(str(list(mcbShelf.keys()))) elif sys.argv[1].lower() == 'del': if mcbShelf is not None: for item in mcbShelf.items(): print('删除数据[{}] = [{}]'.format(item[0], mcbShelf[item[0]])) del mcbShelf[item[0]] else: print('mcb 为空!') else: if sys.argv[1].lower() in mcbShelf.keys(): pyperclip.copy(mcbShelf[sys.argv[1]]) else: print('Sorry,未找到该项') mcbShelf.close()
注:
汉字匹配:[\u4E00-\u9FA5]
.pyw格式不会显示终端窗口
random.sample(wrongAnswer,3)随机取样
random.shuffle(states)全部打混
相关文章推荐
- Python学习笔记(18)-目录操作与文件读写
- python基础教程学习笔记---(6)文件读写
- python学习笔记之编写readConfig读写配置文件
- Python学习笔记(二十三)文件读写
- Python学习笔记——文件读写
- Python学习笔记(3)--数据文件的读写
- 廖雪峰python学习笔记10&&11:容错处理与文件读写
- Python 学习笔记 (6)—— 读写文件
- python学习笔记 IO 文件读写
- Python学习笔记--文件读写
- 【Python学习笔记】IO编程:文件读写
- python 学习笔记 错误调试 文件读写
- Python3学习笔记7-文件的读写
- 【python学习笔记】pthon3.x中的文件读写操作
- 初学Python的学习笔记12----单元测试、文档测试和文件读写
- 【python学习笔记】22:numpy文件读写和一些常量
- python文件读写实例学习笔记
- python学习笔记——文件
- 【MFC 学习笔记】CFile读写文件
- nginx 源码学习笔记(十三)——文件读写和配置文件读取