首页 > 编程语言 > 详细

python学习:文件操作

时间:2019-12-25 19:07:42      阅读:81      评论:0      收藏:0      [点我收藏+]
open(文件名,‘打开模式,encoding=编码方式)

打开模式有:

  • r,只读模式(默认),不可写。
  • w,只写模式,不可读。如果文件不存在则创建文件,如果文件存在则删除内容。
  • a,追加模式,不可读。如果文件不存在则创建文件,如果文件存在则只追加内容。

      ”+“表示可同时读写某个文件

  • r+,先读后写。可读,可写,可追加。
  • w+,先写再读。(先将原文件内容删除,然后写入新内容进去,接着读取已写入的内容)
  • a+,同a

      ”U“表示在读取时,可以将\r\n自动转换成\n。(u只能与r或者r+同时用)

  • rU
  • r+U
  • rbU
  • rb+U

      "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,特别是windows操作系统在处理二进制文件时需要注意 ,linux可以不用管)

  • rb
  • wb
  • ab
 1 # w,只写模式,不可读
 2 f = open("filetest1", "w", encoding="utf-8")
 3 f.write("北冥有鱼,其名为鲲,鲲之大,一锅炖不下;\n")
 4 f.close()
 5 
 6 # r,只读模式,不可写
 7 f = open("filetest1", "r", encoding="utf-8")
 8 content = f.read() # read方法会将文件内容都读出来
 9 print(content)
10 f.close()
11 
12 # a,追加模式,可写,不可读
13 f = open("filetest1", "a", encoding="utf-8")
14 f.write("化而为鸟,其名为鹏,鹏之大,需要两个烧烤架,一个秘制,一个微辣。")
15 content = f.read()  # 异常:io.UnsupportedOperation: not readable
16 # print(content)
17 f.close()
18 
19 # readlines()方法也会将文件内容全部读取到内存里
20 # readlines()方法的返回值是一个列表,列表的每个元素就是文件的一行内容
21 f = open("filetest","r",encoding="utf-8")
22 for index, line in enumerate(f.readlines()):
23     if index == 4:
24         print("--------华丽分割线--------")
25         continue
26     print(line.strip())
27 f.close()
28 
29 # 上面读文件用到的read()和readlines()方法会将文件的内容全部读出来,如果文件太大,内存将耗尽
30 # 下面的方式只会一行一行的读取,读取效率高,输出结果同read和readlines完全相同
31 f = open("filetest","r",encoding="utf-8")
32 count = 0
33 for line in f:
34     count += 1
35     if count == 5:
36         print("--------华丽分割线--------")
37         continue
38     print(line.strip())
39 f.close()
40 
41 f = open("filetest","r",encoding="utf-8")
42 print(f.tell()) # 获取光标当前的位置
43 print(f.readline())
44 print(f.tell())
45 print(f.readline())
46 f.seek(0) # 设置光标的位置
47 print(f.readline())
48 f.close()
49 
50 # flush:
51   # 强制将数据写入文件。
52   # 如果不使用flush,python自动往缓冲区写数据,缓冲区满后再写入文件并清空缓冲区,这样容易丢数据
53 
54 f = open("filetest","a",encoding="utf-8")
55 f.seek(10) # 设置光标位置
56 f.truncate(10) # 截取文件内容。注意:理论上是从第10的位置开始写内容,实际还是从文件的开始截取指定的长促。
57 f.close()
58 
59 # 进度条
60 import sys,time
61 
62 for i in range(20):
63     sys.stdout.write("#")
64     sys.stdout.flush()  # 好像也加这一句也能出效果
65     time.sleep(0.1)

 

# r+,读写

# 先准备一个文件,写入5行内容
f = open("filetest3", "w", encoding="utf-8")
f.write("老夫聊发少年狂,半夜想喝疙瘩汤。\n")
f.write("一树梨花压海棠,酸菜白肉氽血肠。\n")
f.write("不思量,自难忘,啃上一根大骨棒。\n")
f.close()

# r+,读写模式
f = open("filetest3", "r+", encoding="utf-8")  #以读写模式打开文件
f.readline()
f.readline()
f.write("---------华丽分割线---------\n")

f.seek(0) # 如果不加这一行,下面的read方法是读不到内容的,因为上面write的时候并不是在第2行写入的,而是在内容的最后接着又接入的。
content = f.read()  
print(content)

f.close()

注意文件内容:
理论上,我们先往一个文件中写入了5行内容。然后我们使用r+(读写)模式写读取两行内容,然后write一行内容进去,理论上我们期望的结果应该如下:
老夫聊发少年狂,半夜想喝疙瘩汤。
一树梨花压海棠,酸菜白肉氽血肠。
---------华丽分割线---------
不思量,自难忘,啃上一根大骨棒。

其实,实际结果是如下:
老夫聊发少年狂,半夜想喝疙瘩汤。
一树梨花压海棠,酸菜白肉氽血肠。
不思量,自难忘,啃上一根大骨棒。
----------华丽分割线---------

结论:总是在文件的最后追加内容。而不是插入。

 

 

             

python学习:文件操作

原文:https://www.cnblogs.com/Ryan-Fei/p/12098383.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!