首页 技术 正文
技术 2022年11月17日
0 收藏 368 点赞 2,932 浏览 2327 个字

文件操作

打开文件

open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象。[python 3.5 把file()删除掉] with open(somefile.txt,’r’) as files:  do_something(files)with 语句打开文件并把值赋值到变量,之后可以对文件操作。文件在语句结束之后会自动关闭,即使异常引起也会退出。 文件模式r   #只读模式(默认)w(>) #写模式a (>>)  #追加模式b (二进制模式,如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注;可添加到其他模式中使用)+ (读/写模式,可添加到其他模式中使用)U (表示在读取时,可以将 \r \n \r\n自动转换成 \n 与 r 或 r+ 模式同使用) 基本文件方法:读文件内容#一次性读取所有内容到内存obj.read()#读取文件中的所有行并将其作为列表返回obj.readlines()#一次仅读取一行(从当前位置开始一直到一个换行符的出现,也读取这个换行符)obj.readline() 写文件内容#写入字符串obj.write(‘内容’)
#写入字符串列表(实际上任何序列和可迭代的对象都行),它会把所有的字符串写入文件。writelines(list) 随即访问 seek(offset[,whence])把当前位置(进行读和写的位置)移动到由offset定义的位置,whence.offset是一个字节(字符)数,whence默认是0,表明偏移量是从文件头开始计算的(偏移量必须是非负的)whence可以被设置为1(相对于当前位置的移动,offset可以是负的)或者2(相对于文件结尾的移动 )

f = open('test2.txt','w')
f.write('')
f.seek()
f.write('hello, world!')
f.close()
f = open('test2.txt','r')
line = f.read()
print(line)
f.close()01234hello, world!89truncate #截断数据,仅保留指定之前数据
f = open('test2.txt')
f.seek(4)
f.truncate() #截断f.seek(4)以后的所有数据,仅保留之前的。
f.close()

tell返回当前文件的位置

f = open('test2.txt')
f.read()
f.read()
print(f.tell())
f.close()
5#假设文件中包含中文
f = open('test2.txt','r',encoding='utf-8')
a = f.seek(2) #文件报错,因为一个汉字占3个字节,seek是按照字节位移(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start byteb = f.read(2) #读取字符,(在以前版本中一个汉字占3个字节,单读取2个字节将会出现乱码)
print(a)
c = f.tell() #返回值还是按照字节来的。
print(b)好0
4

 关闭文件obj.close()如果想确保文件被关闭了,可以使用try/finally语句,并且在finally自居中调用close方法。

#Once your file here
try:
#Write data to your file
finally:
file.close()

迭代文件内容和文件对象

read(),readline(),readlines()前面都已经提到过,下面介绍另一种方法fileinput

在对一个比较大的文件进行迭代行的操作时,readlines()会占用大量的内存,既可以使用while循环和readline,还可以使用for循环来实现行的迭代。

import fileinput
for line in fileinput.input(filename): #便于遍历多个输入流中的行。
print(line)

fileinput模块中的函数

input(files[,inplace[,backup]])   #便于遍历多个输入流中的行

filename()              #返回当前文件的名称

lineno()              #返回当前(累计)的行数

filelineno()              #返回当前文件的行数

isfirst()              #检查当前行是否是文件的第一行

isstding()             #检查当前最后一行是否来自sys.stdin

nextfile()              #关闭当前文件,移动到下一个文件

close()               #关闭序列

文件迭代器

f = open(filename)
for i in f:
print(i)
f.close()

可以对文件迭代器执行和普通迭代器相同的操作,比如将它们转换为字符串列表(list(open(filename))),这样所达到的效果和readlines一样。

f = open('log.txt','w')
f.write('aaa\n')
f.write('bbb\n')
f.write('ccc\n')
f.write('ddd\n')
f.close()
lines = list(open('log.txt'))
print(lines)['aaa\n', 'bbb\n', 'ccc\n', 'ddd\n']
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,071
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,549
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,397
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,174
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,809
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,889