Python中操作文件

open()函数

简介

预想操作python中的文件(打开/创建/追加),必须使用python的内置函数:open()
open函数常用参数有两个: 第一个实参,是文件的所在路径(若文件在python中,则写文件名称即可,若文件在电脑中,则需要填写文件的绝对路径,且字符需要转义) 第二个实参,决定了打开文件的模式:只读,写入,追加等。常用的包括r,
w,a,+,b(后边详细介绍每个字符的含义),如果不传参,默认使用r的方式
文件操作三步骤:
1、打开open()
2、操作read()、write()、seek()
3、关闭close()

语法
file = open('filename','mode',encoding='utf-8')
print(file.read())
file.close

实例
file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8') # 追加读写模式,使用a+
file.write('hello 123')# 追加写内容,使用write()方法
file.seek(0) # 移动指针位置,使用seek()方法
print(file.read()) # 读文件,使用read()方法
file.close # 关闭文件,使用close()方法

不同模式打开文件的含义

b   二进制模式,以二进制格式打开或写入,一般用于打开非文本文件,如图片,可与r,w,a,+共同使用,如:rb,rb+,wb,wb+,ab,ab+
+   打开一个文件进行更新(可读可写),可与r,w,a共同使用,如:r+,w+,a+
r 读模式,只能读不能写。这是默认模式,打开不存在的文件会报错
r
+ 读写模式,文件指针将会放在文件的开头,打开不存在的文件会报错
w 写模式,只能写不能读。
如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
w+  读写模式,如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
a   追加模式,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a
+
追加读写模式,打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

模式rr+ww+aa+
   
 
创建    
覆盖        
指针在开始    
指针在结尾        

read()方法--读

file = open('C:Users\User\Desktop\hello.txt','r',encoding='utf-8')

print(file.read()) # 读取文件中的所有内容
file.seek(0)
print(file.readline()) # 按行读取文件中的内容,读取时占用内存小,比较适合大文件
file.seek(0)
print(file.readlines()) # 读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存
print(file.readable()) # 如果文件是可读的,返回 True,否则返回 False

file.close

write()方法--写

file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8')

file.write('123
') # write()的参数是一个字符串
file.writelines(['456
','456
']) # writelines()的参数可以是一个字符串,也可以是一个列表
file.seek(0)
print(file.read())
print(file.writable()) # 如果文件是可写的,返回True,否则返回Flase

循环文件 

# 循环取值
file = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式 for line in file: print(line)
# 循环写入
l = ['haha','heihei','hehe','lala']

for i in l:
    f = open('input.txt', 'w+', encoding='utf-8')
    f.write(i)
    f.seek(0)
    print(f.read())
    f.close()
# 循环写入
l = ['a', 'b', 'c', 'd', 'e']
f = open('wxy.txt', 'w', encoding='utf-8')  # 打开一个文件向里边写入
for i in l:  # 循环list
    f.write(i + '
')  # 每循环一次,写入一个值,如果想换行,就在后面加


f.writelines(l)  # 传一个list的话,它会帮你循环,把list中的每个元素都写到文件里面,该方法和上边循环的效果一样
f.close()

f1 = open('wxy.txt', 'r', encoding='utf-8')
print(f1.read())  # 读取这个文件中的值
f1.close()

replace()方法--替换

练习:把test文件中的xiaolan改成dalan

test文件中内容:
xiaohei
xiaobai
xiaolan
xiaohong
# 写法1,
# 思路:1、读取内容 2、替换 3、清除原来文件的内容 4、把新的内容写进去


file = open('test','a+',encoding='utf-8')
file.seek(0) # 移动指针位置
result = file.read() #将读取的文件,赋值给result
content = result.replace('xiaolan','dalan')  # 将result中替换后的信息,赋值给content
file.truncate(0) # 清空原有文件
file.write(content) # 将替换后的内容写入到file中
file.seek(0)
print(file.read()) # 读取文件
file.close()
# 写法2,大文件用这种方式处理
# 思路:1、逐行处理 2、打开a(要修改的文件)文件,在打开b(空文件)文件
# 3、从a文件中读一行,修改,修改之后写到b文件中 4、删除a文件,把b文件的名字改成a文件
f = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式
f2 = open('test1.txt','a+',encoding='utf-8') # w模式,打开不存在的文件会创建

for line in f:
    result = line.replace('xiaolan','dalan')# 替换文件内容
    # result = line.upper() # 把文件内容转换为大写字母
    f2.write(result)
f2.seek(0)
print(f2.read())
f.close()
f2.close()

import os
os.remove('test.txt') # 将test.txt文件删除
os.rename('test1.txt','test.txt') # 将test1.txt重命名为test.txt
学而时习之不亦说乎!
原文地址:https://www.cnblogs.com/wxinyu/p/14832467.html