文件与文件路径

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)startpath 的相对路径

>>> 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 + 1return kk = 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.0import 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学习笔记(五)——读写文件相关推荐

  1. python敏感词过滤代码简单代码,Python学习笔记系列——读写文件以及敏感词过滤器的实现...

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

  2. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

  3. Python学习笔记D9(文件)

    Python学习笔记D9(文件) 文件 1.打开文件 open(file, mode='r') 接收两个参数:文件名(file)和模式(mode),用于打开一个文件,并返回文件对象,如果该文件无法被打 ...

  4. Python学习笔记九:文件I/O

    打印到屏幕: 1 #!/usr/bin/python 2 3 print "Python is really a great language,", "isn't it? ...

  5. Python学习笔记之头部文件

    首先是设置Python的运行模式 即我们常见的开头那一行#!/usr/bin/python3或者#!/usr/bin/python 主要是用来指定运行方式 与我们在终端中输入:python3 xxx. ...

  6. Python学习笔记--6.2 文件读写

    #文件中所有读到的内容都是字符串open('a.txt')#file('a.txt','w')python2里用file.3里只用open # r只读.打开的文件不存在的话,会报错.不写模式的话,默认 ...

  7. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习. ## python文件读写 `1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ...

  8. 深度之眼 - Python学习笔记——第八章 文件、异常和模块

    第八章 文件.异常和模块 实际应用中,我们绝大多数的数据都是通过文件的交互完成的 8.1 文件的读写 8.1.1 文件的打开 文件的打开通用格式 with open("文件路径", ...

  9. python学习笔记之操作文件,模块使用

    文件操作: 基础操作: 创建/打开文件: #语法 file=open(filename,mode='r',buffering=-1,encoding=None,errors=None,newline= ...

  10. 我的python学习(五)文件操作、异常捕获

    读写.创建文件 文件的分类: 文本文件:基于字符编码,存储的是普通字符串,不包括字体.字号.样式.颜色等信息,可通过文本编辑器显示和编辑,例如txt文件: 二进制文件:基于值编码的,以字节形式存储,其 ...

最新文章

  1. 公式免费转 LaTex 代码,截图、转换一气呵成,每月 1000 次全免费
  2. 深度学习面试必备的 25 个问题
  3. 什么是1+N模式的新一代城市大脑建设方案
  4. 2011年使用天正建筑8.0注册版(附注册机)
  5. 命令行输入mysql不行_MySQL命令行无法插入中文数据
  6. 3d激光雷达开发(icp匹配)
  7. IDEA This is not a valid Java qualified name问题解决
  8. BIGEMAP GIS Office
  9. POC 、EXP 、VUL 、CVE 、0DAY概念
  10. java设计一个bank类实现银行_关于JAVA设计一个银行账户管理类
  11. 一键禁用windows defender
  12. J2ME--丰富多彩的领域中生机勃勃的技术
  13. 【阿里云】短视频SDK产品
  14. 2022-03-15 工作记录--PHP-判断数组的长度 + 展示数组的长度
  15. 实体店运用互联网思维进行客户裂变,不到8个月净赚2000万
  16. 创业者应具备的素质和条件
  17. 你看那只追风的风筝,它好像是在发电?
  18. (最全干货分享)渗透测试全流程归纳总结之二
  19. SIM300-E GPRS模块硬件
  20. 想要教AI一个常识真的好难,幸运的是保罗·艾伦拿钱闯进来了

热门文章

  1. wincc项目激活需要哪些服务器,WinCC创建服务器客户端项目
  2. 射频功放学习之ADS原理图版图联合仿真
  3. 关于ChartControl的绑定数据源使用
  4. 纽约亮马河邮轮 - 从水上欣赏纽约迷人景色
  5. 数据中心的三种布线方式(EOR/MOR/TOR)
  6. 计算机电源复位,关于Apple本本的电池复位(重置电源管理、电池重置)方法
  7. Linux下安装宋体以及微软雅黑字体
  8. php多语言商城,Ecshop商城多国语言修改方法
  9. Android Toast提示的使用
  10. 十六进制和二进制相互转换(快速转换)