博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记三 文件操作(基础篇)
阅读量:5292 次
发布时间:2019-06-14

本文共 2572 字,大约阅读时间需要 8 分钟。

文件操作

打开文件

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('01234567890123456789')f.seek(5) f.write('hello, world!')f.close()f = open('test2.txt','r')line = f.read()print(line)f.close()01234hello, world!89 truncate #截断数据,仅保留指定之前数据
f = open('test2.txt') f.seek(4) f.truncate()  #截断f.seek(4)以后的所有数据,仅保留之前的。 f.close()

tell返回当前文件的位置

f = open('test2.txt')f.read(2)f.read(3)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 byte b = f.read(2)  #读取字符,(在以前版本中一个汉字占3个字节,单读取2个字节将会出现乱码) print(a) c  = f.tell() #返回值还是按照字节来的。 print(b) 好0 4
 
关闭文件
obj.close()
如果想确保文件被关闭了,可以使用try/finally语句,并且在finally自居中调用close方法。
#Once your file heretry:    #Write data to your filefinally:    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']

转载于:https://www.cnblogs.com/koka24/p/5137147.html

你可能感兴趣的文章
Segmentation fault(Core Dump)
查看>>
SQL Server全文索引 (简单的搜索引擎)
查看>>
关于logstash-out-mongodb插件说明
查看>>
第三届蓝桥杯本科预赛 c++ 第十题
查看>>
redis详解
查看>>
修改列名以及其数据类型
查看>>
实用性较强的idea插件
查看>>
鱼塘钓鱼(fishing)
查看>>
java基础篇---正则表达式
查看>>
声明提升
查看>>
关于c# .net爬虫
查看>>
Rails--render partial时传递参数
查看>>
java基础不牢固容易踩的坑
查看>>
P4824 [USACO15FEB]Censoring (Silver) 审查(银)
查看>>
实验二
查看>>
记录一些IDEA常用的快捷键和技巧 二(界面布局)
查看>>
log4j的简单应用(转载)
查看>>
iOS UILabel自定义行间距
查看>>
git命令详解(一)
查看>>
【模板】埃筛
查看>>