Python修炼之路-文件操作

文件操作流程:
    打开文件,得到文件句柄并赋值给一个变量
    通过句柄对文件进行操作
    关闭文件
    每次文件打开、读取信息时,Python自动记录所达到的位置,好比一个书签,之后每一次读取都会从上次结束的地方开始,如果要从开始的位置读取,可以将其关闭后打开。

文件操作模式:r :只读模式 (默认)
    w :只写模式 (不可读;如果文件不存在,则创建新文件;如果文件存在,则删除原内容)
    a :追加模式 (不可读;如果文件不存在,则创建新文件;如果文件存在,则在文件末追加内容)
    + 表示可以同时读写某个文件:
    r+ : 可读可写,追加形式写入,读取行位置不变
    w+ : 写读,覆盖形式写入,此时在文件最后,如果需要读取文件,则需要使用seek
    a+ : 可读可写,追加形式写入,以这个模式打开文件,默认在文件末尾,如果需要读取文件,则需要使用seek
    b: 处理二进制文件 (FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
       在socket编程中,python3.x以二进制传输,需要encode,python2.x可以通过字符串传输
    rb: 二进制形式读取文件,注意此时不能有encoding = "utf-8",会报错ValueError。
    wb:
    ab:
    U:表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
       rU:
       r+U:
    文件缓存:写入文件时,可能写入内容还在缓存中,并没有写进硬盘,可以通过flush方法冲刷缓存,写进硬盘中。
    with语句:当with代码块执行完毕时,内部会自动关闭并释放文件资源。
    python2.7之后,with支持同时对多个文件的上下文管理。

文件读写操作

 1 #*************************读************************
 2 #默认读取,则整个文件以字符串形式返回
 3 f = open("file","r",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
 4 data = f.read()                          #读取剩下的所有内容,文件大时不建议使用
 5 data2 = f.read()                        #此时文件已经读取完,书签在文件末,data2中为空
 6 print(data)
 7 print("---------------")
 8 print(data2)
 9 f.close()
10
11 #按指定字符数
12 f = open("file","r",encoding="utf-8")
13 print(f.read(1))
14 print(f.read(4))
15 f.close()
16 生
17 当作人杰
18
19 #按行读取
20 f = open("file","r",encoding="utf-8")
21 print(f.readline())
22 print(f.readline())
23 f.close()                 #原文档有回车,所以有一个空行
24
25 f = open("file","r",encoding="utf-8")
26 lines = f.readlines()
27 print(lines,len(lines))
28 f.close()
29 [‘生当作人杰\n‘, ‘死亦为鬼雄\n‘, ‘至今思项羽\n‘, ‘不肯过江东‘] 4
30
31 #for循环迭代
32 f = open("file","r",encoding="utf-8")
33 for line in f:                    #一行一行的读,效率比较高
34     print(line)
35 f.close()
36
37 #模块自动关闭文件
38 with  open(‘file‘,‘r‘,encoding="utf-8") as f:
39     print(f.read())
40
41
42
43 #*****************写*******************
44 text_file = open("write_it.txt","w")        #会自动创建一个新文件,原来如果有个这个文件,则会覆盖,慎用
45 text_file.write("Line 1\n")
46 text_file.write("This is line 2\n")
47 text_file.write("That makes this line 3\n")
48
49 #将字符串列表写入到文件
50 text_file = open("write_it.txt","w")
51 lines = ["Line \n",
52          "This is line 2\n",
53          "That makes this line 3\n"]
54 text_file.writelines(lines)
55 text_file.close()

文件追加与修改操作

 1 #*****************追加*******************
 2 f = open("file","a",encoding="utf-8")      #在文件后追加信息,注意使用“\n”
 3 f.write("\n李清照")
 4 f.close()
 5
 6 #**********************可读可写模式******************
 7 f = open("file","r+",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
 8 data = f.read()                          #读取剩下的所有内容,文件大时不建议使用
 9 f.write("\n南宋")
10 f.close()
11
12 #**********************修改文件******************
13 f = open("file","r",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
14 f_new = open("file.bak","w",encoding="utf-8")
15 for line in f:
16     if "西天的云彩" in line:
17         line = line.replace("西天的云彩","今天的离别")
18     f_new.write(line)
19 f.close()
20 f_new.close()
21 #结论:通过匹配要修改的内容修改,保存在另外一个新建文件中。

文件其他操作

 1 #**********文件的其他用法********************
 2 f = open("file","r",encoding="utf-8")
 3 print(f.tell())                            #tell 返回文件当前位置,按字节计算
 4 date = f.readline()
 5 date = f.readline()
 6 print(f.tell())
 7 f.seek(15)                                 #seek 移动到文件某个字符位置,一个汉字为3个字节
 8                                            #seekable 是否可以移动,tty文件不可以
 9 print(f.readline())
10 print(f.encoding)                          #encoding 返回文件编码
11 print(f.fileno())                          #fileno 调用操作系统哪个接口
12 print(f.flush())                           #flush 冲刷文件的内部缓存
13 f.truncate(10)                             #从头开始截断,原文件只剩下10个字符,不指定参数会清空原文件,
14 f.close()

二进制文件操作

1 #***************二进制读写********************
2 f = open("file","rb")    #文件句柄,输出中文时注意文件编码
3 print(f.read())
4 f.close()
5 #b‘hello world‘
6
7 f = open("file","wb")    #文件句柄,输出中文时注意文件编码
8 f.write("Hello world\n".encode())
9 f.close()

with语句操作

 1 #*********************with语句*********************
 2
 3 with open("loginlog.txt","r") as f:
 4     for line in f:
 5         print(line)                    #代码块执行完毕后会自动关闭文件
 6
 7 #with打开多个文件
 8 with open("loginlog.txt","r") as f,\      #python代码规范,一行尽量不要超过80个字符,建议用\换行
 9         open("1111","r") as f2:
10     for line in f:
11         print(line)

文件操作问题

  1 #***********************文件操作问题******************
  2 #文件内容: abcdefghijklmno
  3 #**************模式:r+************************
  4 f = open("file","r+",encoding="utf-8")
  5 print("初始位置:", f.tell())
  6 data2 = f.read(5)
  7 print("-------%s-------" % (data2) )
  8 print("读取五个字母之后的位置:", f.tell())
  9 f.write("a")
 10 print("写入一个字母之后的位置:", f.tell())
 11 data = f.read(5)
 12 print("-------%s-------" % (data) )
 13 print("再次读入五个字母之后的位置:", f.tell())
 14 f.close()
 15 初始位置: 0
 16 -------abcde-------
 17 读取五个字母之后的位置: 5
 18 写入一个字母之后的位置: 19           #追加
 19 -------fghij-------                   #从第6个位置开始读
 20 再次读入五个字母之后的位置: 19
 21 #结论:读取正常,在文件末尾添加,但是继续读取和tell()返回的值不一致
 22 #问题:如果先写再读,则不是追加,会从文件开始覆盖增加
 23 f = open("file","r+",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
 24 f.write("yyy")
 25 print("写入字母之后的位置:", f.tell())
 26 data2 = f.read(5)
 27 print("-------%s-------" % (data2) )
 28 print("读取字母之后的位置:", f.tell())
 29 f.write("zzz")
 30 print("写入字母之后的位置:", f.tell())
 31 data = f.read(5)
 32 print("-------%s-------" % (data) )
 33 print("再次读入五个字母之后的位置:", f.tell())
 34 f.close()
 35 写入字母之后的位置: 3
 36 -------defgh-------
 37 读取字母之后的位置: 8
 38 写入字母之后的位置: 17
 39 -------ijkzz-------
 40 再次读入五个字母之后的位置: 17
 41 #修改:加入seek(0,2),
 42 f = open("file","r+",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
 43 f.seek(0,2)
 44 f.write("yyy")
 45 print("写入字母之后的位置:", f.tell())
 46 data2 = f.read(5)
 47 print("-------%s-------" % (data2) )
 48 print("读取字母之后的位置:", f.tell())
 49 f.write("zzz")
 50 print("写入字母之后的位置:", f.tell())
 51 data = f.read(5)
 52 print("-------%s-------" % (data) )
 53 print("再次读入五个字母之后的位置:", f.tell())
 54 f.close()
 55 #结论:在文件末添加,但是读取会出现异常,需要添加seek(0)
 56
 57 #******************模式:w+*********************
 58 f = open("file","w+",encoding="utf-8")    #文件句柄,输出中文时注意文件编码
 59 print("初始位置:", f.tell())
 60 f.write("abcdefghijk")
 61 print("写入字母之后的位置:", f.tell())
 62 data2 = f.read(5)
 63 print("-------%s-------" % (data2) )
 64 print("读取字母之后的位置:", f.tell())
 65 f.write("zzz")
 66 print("写入一个字母之后的位置:", f.tell())
 67 data = f.read(5)
 68 print("-------%s-------" % (data) )
 69 print("再次读入五个字母之后的位置:", f.tell())
 70 f.close()
 71 初始位置: 0
 72 写入字母之后的位置: 11
 73 --------------
 74 读取字母之后的位置: 11
 75 写入一个字母之后的位置: 14
 76 --------------
 77 再次读入五个字母之后的位置: 14
 78 #修正:在第一次写入后,加seek(0)情况
 79 初始位置: 0
 80 写入字母之后的位置: 11
 81 当前位置: 0
 82 -------abcde-------
 83 读取字母之后的位置: 5
 84 写入字母之后的位置: 14
 85 -------fghij-------
 86 再次读入五个字母之后的位置: 14
 87 #******************模式:a+****************
 88 f = open("file","a+",encoding="utf-8")
 89 print("初始位置:", f.tell())
 90 data2 = f.read(5)
 91 print("-------%s-------" % (data2) )
 92 print("读取字母之后的位置:", f.tell())
 93 f.write("zzz")
 94 print("写入字母之后的位置:", f.tell())
 95 data = f.read(5)
 96 print("-------%s-------" % (data) )
 97 print("再次读入五个字母之后的位置:", f.tell())
 98 f.close()
 99 --------------
100 读取字母之后的位置: 11
101 写入字母之后的位置: 14
102 --------------
103 再次读入五个字母之后的位置: 14
104 #结论:在文件后追加,读取文件有问题,没有输出
105 #修改:在第一次读取前添加seek(0)
106 -------abcde-------
107 读取字母之后的位置: 5
108 写入字母之后的位置: 17              #追加
109 -------fghij-------                  #从第6个位置开始读
110 再次读入五个字母之后的位置: 17
111 #结论: 添加seek(0)可以解决读取的问题,但是tell()返回位置和继续读取位置不一样

时间: 2024-10-10 17:42:39

Python修炼之路-文件操作的相关文章

十三、python沉淀之路--文件操作

一.文件的读操作 例1 1 f = open('学习',encoding='utf-8') #首先要打开文件,不然直接读,是读不出来的 2 data = f.read() #read后的括号里不添加任何东西 3 print(data) 4 f.close() #读取完了后一定要记得关闭文件,不然内存会一直交互数据占据内存空间,而且不关闭,数据容易丢失,或被别人读取 例2:readline   readable 1 f = open('学习','r',encoding='utf-8') 2 3 p

十四、python沉淀之路--文件操作

一.文件操作b模式 1. 1 # f = open('test11.py','rb',encoding='utf-8') # 这种情况会报错 2 f = open('test11.py','rb') # b 模式不能指定编码方式 3 data = f.read() 4 print('直接打印出来:',data) 5 print('解码打印\n',data.decode('utf-8')) 6 f.close() 1 直接打印出来: b'11111\r\n22222\r\n3333\r\n' 2

python字符串处理与文件操作

1.strip函数 strip是trim(裁剪)掉字符串两边的空格或字符.(lstrip/rstrip) 如: 空格 theString = ' abcdbcyesornoabcbacdd ' print theString.strip() abcdbcyesornoabcbacdd 字符 theString = 'abcdbcyesornoabcbacdd' print theString.strip('abcd') #去掉两端的abcd字符 yesorno 问题:如何去掉中间空格. theS

Delphi 之路 — 文件操作函数 (说明和使用说明)

Delphi 之路 - 文件操作函数 (说明和使用说明) //判断文件是否存在 FileExists //判断文件夹是否存在 DirectoryExists //删除文件 DeleteFile; Windows.DeleteFile //删除文件夹 RemoveDir; RemoveDirectory //获取当前文件夹 GetCurrentDir //设置当前文件夹 SetCurrentDir; ChDir; SetCurrentDirectory //获取指定驱动器的当前路径名 GetDir

Python之路-文件操作(py)

文件操作的基本步骤: 1.打开文件:f=open('filename'),with open('filename') as f 2.操作文件:增,删,改,查 3.关闭文件:f.close 打开文件 python中打开文件的函数为open('filename',mode='r',encode='utf-8'),open函数默认返回文件的句柄,我们可以根据句柄来对文件进行增,删,改,查的操作.将句柄赋给我们定义的变量,假设我们定义变量为f,则f=open('filename',mode='r',en

python之路----文件操作

python文件操作 文件操作的基本流程: 1.打开文件f_read = open("filename",mode = 'r',encoding="utf-8") 打开一个文件并且将文件句柄赋值给变量f_read,模式可以有多种,如: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可

python学习笔记(三):文件操作和集合

这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 寂寞当然有一点 你不在我身边 总是特别想念你的脸 距离是一份考卷 测量

Python 第三天 文件操作

文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. open会自己在Python中找. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读,也

java与python在处理大文件操作上的对比

1.问题描述 现在对一个2g的大文件,抽取第二列含有特点16个串的信息,并将这些含有特串的信息,写回到两个文件中 2.具体实现 (1)java代码 package naifen; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java