python(基础_文件)

**

文件

**
Linuex中也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7

  1. open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True):

读文件
参数含义
File:文件存放路径

  1. 文件路径是一个字符串(包括你要读取的文件名和文件后缀名)
  2. 路径中”/”或者 “\”表示下级。(”\”中第一个”\”是转义符)
  3. 路径可以是绝对路径和相对路径(如果路径里只有文件名,则表示的是相对路径,相当于和该python文件是同级存储)
    Mode:模式
    r: 读
    w: 写
    x: 读写
    rb: 读二进制文件(图片,音频,视频等)
    encoding:字符编码
    GBK:仅在中国通用
    Utf-8:万国通用码
    Ascii
    方法:
    file = open(“C:\Users\Administrator\Desktop\001.txt”, “r”)
    data = file.read(30)
    print(file.name)
    print(data)
    file.close()

read(10)代表着读取文件的长度,如果不设置则全部读取(汉子也算一个长度)
file.name 代表着所读文件的文件名
补充:这时候print(“file”)的返回值是001.txt中文件字符串的长度

  1. file.close()
    方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
    当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
    补充:这时候print(“file”)的返回值是None

  2. file.flush()
    用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
    一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
    3.file.fileno()
    返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话

  3. file.isatty()
    检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。

  4. file.next()
    ython 3 的内置函数 next() 通过迭代器调用 next() 方法返回下一项。 在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration

  5. file.read([size])
    从文件读取指定的字节数,如果未给定或为负则读取所有。(返回一个字符串类型)

  6. file.readline([size])
    用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
    如果size 超出了当前行的字符长度,则只显示当前行,不会显示下一行的字符,但是光标的位置是下一行的开始

  7. file.readlines([sizeint])
    用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。
    若有sizeint参数时候:
    若Sizeint小于第一行长度(一个字符和汉字都长度都为1)则打印第一行的所有内容,若sizeint大于第一行长度小于第二行长度(换行是长度加1,不加2,计算光标时才加2)则打印第一行和第二行所有的内容,以此类推。
    9.file.seek(offset[, whence])
    offset – 开始的偏移量,也就是代表需要移动偏移的字节数
    whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
    10.file.tell()
    方法返回文件的当前位置,即文件指针当前位置。

  8. file.truncate([size])
    用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

  9. file.write(str)
    用于向文件中写入指定字符串。
    在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
    如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。

  10. file.writelines(sequence)
    向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。换行需要制定换行符 \n。

  11. 补充:

for i in file:
print(i, end="\r")
file.close()
实行结果:

灯1
下你
是风1
又似画s,
恍若灯火处的画中仙
不食人间烟火,又让人
难以靠近。
1323465465465465
for i in file:
print(i, end="\r")
print(9999999999, end="")
file.close()
实行结果:

灯1
下你
是风1
又似画s,
恍若灯火处的画中仙
不食人间烟火,又让人
难以靠近。
9999999999
结论:
1读文件时候print(i, end="\r") 读完后将光标移动到开始,但是前面没有被覆盖掉,因为读完一行后,Pycharm打印面板上的光标移动到当前行的第一个,但是读取文件中的光标换行,打印面板中的光标就换行了,继续打印,没有影响。
2.读取到文件最后一行时候,光标移动到当前行的第一行,文件结尾时,读取文件中的光标不会换行,在执行print(9999999999, end="")时候就将文件中的最后一行覆盖掉。
7. end="\r" 指的是打印面板的光标,和文件中的光标没有关系。
2.
print(file.readline(1)) 数字代表读取该行中的前几个字符,无参时读取整行数据
print(file.readlines(1)) 数字要读取到的字符总数,参数如果超过一行的总数,则自动读取下一行,作为下一个列表元素。无参时读取所有数据等价于read,但返回值是每行组成一个元素(元素末尾是”\n”结束)的列表eg [‘街\n’, ‘灯1\n’]

写文件
file = open(“C:\Users\Administrator\Desktop\002.txt”, mode=“w”)
如果文件不存在,则新建一个文件,如果存在,则覆盖后写文件
要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码
文件相关补充:
1.
读取的时候换行 +1,汉字和字符各占一个
计算光标位置时,光标换行 +2 (汉字占两个光标,换行也是两个光标)
Eg:
001.txt文件

132三星星fa
今天是星期三
今天是星期11
今天是星期11
1
2
3
4

file = open(“C:\Users\Administrator\Desktop\001.txt”, mode=“r”)
file.seek(0)
i = file.read(8)
print(file.tell())
print(i)
file.close()
实行结果:
18446744073709551628
132三星星fa
i = file.read(9)
实行结果:
14
132三星星fa
i = file.read(15)
实行结果:
25
132三星星fa
今天是星期三
i = file.read(16)
实行结果:
27
132三星星fa
今天是星期三
2. os.path.join()
os.path.join()函数中可以传入多个路径:
第一个绝对路径之前的参数将被忽略
以上一种情况为先。在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接。

注意:可以将多个路径进行拼接,第一个绝对路径之前的参数将被忽略
也就是说,如果path2的第一个字符是‘/’,那么返回的拼接路径中path1并没有包含。
3. os.path.isdir()用于判断对象是否为一个目录
os.listdir()用于返回一个由文件名和目录名组成的列表,需要注意的是它接收的参数需要是一个绝对的路径
4.执行完自动close,避免忘记关闭文件导致资源的占用,般来说推荐以下方法:

with open(‘test.txt’, ‘w’, encoding=‘utf-8’) as f:
f.write(‘test’)
#读
with open(‘test.txt’, ‘r’, encoding=‘utf-8’) as f:
f.readlines()
注解:
1.当执行open语句时,先调用对象的__enter__()方法,执行完with里面的代码块的时候,在调用对象的__exit__()方法,文件的关闭语句在__exit__()里面执行
2.as 后面的对象是__enter__()方法返回的对象 ,是第一个参数(文件路径)进行“r”或者“w”或者其它操作后返回的一个对象
注意:
With只支持这两个方法,少一个都不行
5. 遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open(’/Users/michael/gbk.txt’, ‘r’, encoding=‘gbk’, errors=‘ignore’)
6.文件打开模式 “x”
如果文件已经存在,使用此模式打开将引发异常
pickle 模块
python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol])
有了 pickle 这个对象, 就能对 file 以读取的形式打开:
x = pickle.load(file)
打印
ppprint.pprint(x)

猜你喜欢

转载自blog.csdn.net/weixin_42970234/article/details/84192622
今日推荐