文件操作基础
open(类型参数)
参数名 | 意 义 |
---|---|
filename | 要打开的文件名 |
mode | 可选参数,文件打开模式 |
bufsize | 可选参数,缓冲区大小 |
encoding | 文件编码类型 |
errors | 编码错误处理方法 |
newlines | 控制通用换行符模式的行为 |
closefd | 控制在关闭文件是否彻底关闭文件 |
mode是打开文件的操作模式,入下
模式字符 | 表示的操作 |
---|---|
r | 只读(默认) |
w | 可写,会清楚文件内容 |
a | 附件数据 |
b | 二进制数据模式 |
x | 新建一个文件,可写 |
+ | 打开文件直接更新 |
t | 文本模式 |
这些字符可以组合在一起表示对文件的操作模式,如’rb’表示以只读模式打开二进制文件;‘wt’表示以可写模式打开文本文件等。
bufsize为0时表示打开文件不用缓冲,为1时表示进行缓冲,为负值时则使用系统默认值,为任何其他值则表示使用缓冲的字节数。
encoding 表示文件编码的类型,如‘gbk’、‘utf-8’等,以避免读取文件内容出现乱码。newline表示换行符模式,
因为在不同额系统下,换行符有所不同,换行符主要有‘\n’、‘\r’、’\r\n’等,
常用文件操作及其功能
文件操作 | 功能描述 |
---|---|
file.read([n]) | 将整个文件读入到字符串中,或指定n字节 |
file.readline([n]) | 读入文件的一行到字符串中 |
file.readlines() | 将整个文件按行读入到列表中 |
file.write(s) | 向为文件中写入字符串 |
file.wirtelines(lines) | 向文件中写入一行数据列表 |
file.close() | 关闭打开的文件 |
例子:
def file_hd1(name="python.txt"):
f = open(name)
res = 0
i = 0
for line in f:
i +=i
print('第%s行的数据为:' % line.strip(),line)
res += int(line)
print('这些数的和为:',res)
f.close()
if __name__ =='__main__':
file_hd1()
fileinput操作文件
fileinput模块提供了一个以行模式循环处理一个或多个文件内容的功能,它实现了对文件中的‘懒惰’迭代,读取时不需要把文件内容放入内存,这样可以提高程序的效率
fileinput模块中常用的函数有:
input() :返回能够用于迭代一个或多个文件中的所有行的对象
filename(): 返回当前文件的名称
lineno(): 返回当前读取的行的数量
isfirstline(): 返回当前行,判断是否是文件的第一行,是当前文件的第一行时返回真值,反之返回假值
filelineno(): 返回当前读取行在文件中的行数
fileinput 也支持上下文管理器,可以使用with语句来进行操作,二不用子啊使用后手工关闭对象
import fileinput
def demo_fileinput():
with fileinput.input(['fpa.txt','fpb.txt']) as lines:
print("总第%d行," %fileinput.lineno(),"文件%s中第%d: "%(fileinput.filename(),fileinput.filelineno()))
print(line.strip())
if __name__ == '__main__':
demo_fileinput()
常用文件和目录操作
获得当前路径: os.getcwd()
获得目录中的内容 os.listdir(path)
获得当前目录的内容 os.listdir()
创建目录 os.mkdir(path)
删除目录 os.rmdir(path)
判断是否为目录 os.path.isdir(path)
判断是否为文件 os.path.isfile(path)
遍历某目录下的所有文件和目录 :os.walk(path)
由文件名批量获取姓名和考号
import os
filename = []
for a,b,files in os.walk('test'):
if files:
filenames.append([file[:-4] for file in files])
fname = 'testname'
i = 0
for files in filenames:
f=open(fname+str(i)+.xls','w')
for name in files:
f.write(name[-2:]+'\t'+name[:-2]+'\n')
f.close()
i +=1
print("成功生成了!")
批量文件重命名
import os
perfix = 'python'
length = 2
base = 1
format = 'mdb'
# 函数PadLeft将文件名补全到指定的长度
# str为要补全的字符
# num 为要达到的长度
# padstr 未达到长度所添加的字符
def PadLeft(str,num ,padstr):
stringLength = len(str)
n = num - stringlength
if n>=0:
str=padstr*n +str
return str
# 为避免误操作,这里先提示用户
print('the files in %s will be renamed ' % os.getcwd())
all_files = os.listdir(os.getcwd())
print([f for f in all_files if os.path.isfile(f)]) #输出当前目录下的所有文件名
input = input('press y to continue\n') #获取用户输入
if input.lower() != 'y':
exit()
filenames = os.listdir(os.curdir) # 获取当前目录中的内容
# 基数减1 ,为下面i=i+1在第一次执行时等于基数
i = base-1
for filename in filename:
i = i+1
# 判断当前路径是否为文件,并且不是“rename.py”
if filename != "rename.py" and os.path.isfile(filename):
name = str(i)
name = PadLeft(name,length ,'0') #将name补全到指定长度
t = filename.split('.')
m = len(t)
if format =='':
os.rename(filename,perfix+name+'.'+t[m-1])
else:
if t[m-1] == format:
os.rename(filename,perfix+name+'.'+t[m-1])
else:
i=i -1 # 保证i连续
else:
i= i-1 #保证i连续
all_files = os.listdir(os.getcwd())
print([f for in all_files if os.path.isfile(f)])
编译为可执行文件
用py2exe 生成可执行文件
py2exe 可以将Python程序打包为Windows下独立的可执行文件
要使用py2exe ,首先要编写一个编译程序(例如编写一个名为setup.py的程序),然后在Python中运行编译setup.py,
即可将需要封装的其他Python程序编译成可执行文件
#文件hello.py
import ctypes
print('Hello,Python!')
#文件setup.py
from distutils.core import setup
import py2exe
setup(console=['hello.py']) #指定为控制台程序的主程序文件名
然后在命令提示符下执行以下命令就可以完成打包:
python setup.py py2.exe
代码中编译的语句是setup(console=[‘hello’]),方括号中的就是要编译的程序名,前面console 表示将其编译成命令行界面程序。
如果要编译GUI的可执行文件,则将console改为Windows。另外,如果需要将程序编译成 Windows服务,则可以使用service选项
用xx_freeze生成可执行文件
首先需将cx_free 下载到本机并安装后才能使用。下载地址为http://sourceforge.net/projects/cx_freeze/files/4.3.3
安装成功后,接下来就可以进行Python程序的编译操作。仍然以上节操作的hello.py为例,演示在Python3中使用cx_freeze编译为exe文件的方法。
(1)在命令行窗口切换到“hello.py”所在的目录
(2)输入以下命令:
d:\python34\Scripts\cxfreeze --target-dir=dist_cxfreeze hello.py
其中的hello.py是需要编译的程序文件,dist_cxfreeze是目标文件夹,打包回生成dist_cxfreeze目录,
在这个目录中生成编译后的可执行文件。
如果想在编译GUI界面程序运行时不出现控制台窗口的北京,则在编译时还需添加一个base-name的参数,命令入下:
c:\python34\Script\cxfreeze gui_filename.py --target-dir dist --base-name=win32GUI
py2exe 比cxfreeze 编译后的文件多一些,体积也稍大