(Python3)- 文件操作

需要使用库os

1.Unix与Windows的路径分隔符的区别。可以用os.path.join('usr','home')连接。根据当前的系统来生成对应的分隔符。

2.获取当前的目录:os.getcwd()。更改工作目录:os.chdir('str')。创建目录(树):os.makedirs('path')。

3.模块os.path:

  • os.path.abspath(path) : 返回相对路径path的绝对路径
  • os.path.relpath(end,start) : 获取一个字符串,表示从start到end的路径,Windows下不能跨盘符。
  • os.path.isabs(path) : 判断是否是绝对路径。
  • os.path.dirname(path) : 返回文件(夹)的路径。例如C:\\WINDOWS\\EXPLORER.EXE 返回C:\\WINDOWS。而os.path.basename将返回基本名字。如EXPLORER.EXE。需要拆分为列表:os.path.split('path')列表中一个为dirname,另一个是basename。
  • os.path.getsize()可以获取文件的大小的字节数(文件夹检测为0)。os.listdir(‘path')可以返回path下的文件夹(默认不含子文件夹)列表。
  • 检查有效性:os.path.exists('path')检查文件(夹)是否存在。os.path.isdir/isfile(’path')判断是否是文件夹、文件,返回的都是布尔值。
  • 路径的spilt方法:spilt(str) : 将路径按照str将分解。os.path.seq 可以获取当前系统的分隔符。
#coding=gb2312
import os
print(os.path.realpath('c:\\windows'))
#获取文件夹的大小
for  f in os.listdir('c:\\windows\\winsxs'):
    print(f+' size is '+str(os.path.getsize(os.path.join('c:\\windows\\winsxs',f))))
#file shelve usage
#coding=gb2312
import shelve
"""
fptr=open('file.txt','r')
print(fptr.read())
fptr.close()
fptr=open('file.txt','a')
fptr.write('hh的v阿达v阿飞vvv热加工纳入监控功能软件管家看能够看见人家看个人\n')
fptr.close()
"""
#shelve 保存变量数据
"""
shelveself='self'
fptr=shelve.open(shelveself)
cats=['lala','liuliu','fdfdf']
fptr['cats']=cats
fptr.close()
"""
shelveself='self'
fptr=shelve.open('self')
for i in fptr['cats']:
    print(i)

4.文件读写:

  • 和C很像。open(‘path','str') : 以str的模式打开文件path然后可以赋值给某个变量。str: a追加,r读,w复写,r+读写,w+读可和复写,a+读和追加。
  • fptr.read() : 读取整个文件。fptr.readlines() 返回以每一行作为一个列表元素,列表元素以'\n'作为分割的列表。
  • fptr.write(obj) : 写入obj到fptr中。
  • fptr.close() : 关闭文件。

5.shelve模块保存变量:

  • fptr=shelve.open('path')可以打开一个文件。
  • fptr[key]=value。fptr很类似于字典。将名为key的键保存在path文件中,值为value。
  • shelves的对象也会有keys和values方法。
  • Python中也可以创建脚本。
#create py
#coding=gb2312
import os,shelve,pprint
selffile='createfile'
selfptr=shelve.open(selffile)
dic=[{'name':'名字'},{'USSR':'former soviet'},{'China':{'1':'china','2':'Chinese'}}]
selfptr['dic']=dic
crepy='create1.py'
fptr=open(crepy,'a')
fptr.write('#coding=gb2312\nimport pprint,shelve\nprint(pprint.pformat(shelve.open(\'createfile\')[\'dic\']))')

6.实例:生成试卷

#coding=gb2312
#用来随机生成试卷
import shelve,random
#随机生成试卷 
quizs={'Hunan':'Changsha',
'Shaanxi':'Xi\'an',
'Tibet':'Lhasa',
'Xinjang':'Urumqi',
'Beijing':'Beijing',
'Hebei':'Shijiazhuang','Inner Mongolia':'Hohot',
'Jiangxi':'Nanchang','Guangdong':'Guangzhou',
'Guangxi':'Nanning','Jiangsu':'Nanjing',
'Zhejiang':'Hangzhou','Guizhou':'Guiyang','Yunnan':'Kunming'}

for quiznum in range(1,6):
    #写入标题
    quizfile=open('quiz'+str(quiznum)+'.txt','w')
    quizfile.write('Name:\nDate:\nRemark:\n')
    quizfile.write(' '*20+'China capital quiz, Form '+str(quiznum)+' '*20+'\n')
    #洗牌 生成不同的问题
    allquest=list(quizs.keys())#所有的问题
    random.shuffle(allquest)
    fourquest=random.sample(allquest,4)#选出了四个问题
    for ques in fourquest:
        correct=quizs[ques]#正确答案
        allanw=list(quizs.values())
        del allanw[allanw.index(correct)]#删除正确答案
        wrong=random.sample(allanw,3)#随机选择3个错误答案
        anwgroup=[correct] +wrong#3个错误+1个正确答案
        random.shuffle(anwgroup)#避免选项总是相同
        quizfile.write('%s' % n+'. What\' s the capital of '+ques+' Province?\n')
        for i in range(0,4):
            quizfile.write('ABCD'[i]+'. '+anwgroup[i]+'\n')
        quizfile.write('\n\n')
    quizfile.close()
  • random:随机数模块
  • random.shuffle():洗牌
  • random.sample(list,num):在list中随机选取num个元素。
  • %s表示一个占位,外面的% tuple,元组的按顺序排列的元素代表这一系列的占位。list.index(key)获取key在list的下标。

7.其他:

  • .pyw扩展表示脚本不会有终端窗口。

8.操作系统相关:

  • os.environ:获取系统环境变量。使用get(key)方法可以获取指定地变量名地所有路径。
  • os.name:获取系统地信息。如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。
  • os.uname():获取详细的系统信息。WIndows不适用

9.参考: