收藏文章 楼主

Python3 File(文件) 方法

版块:python3 脚本程序   类型:普通   作者:小绿叶技术博客   查看:2049   回复:0   获赞:0   时间:2020-10-17 23:21:58

1

# Python中的文件打开模式

t 文本模式 (默认)。

x 写模式,新建一个文件,如果该文件已存在则会报错。

b 二进制模式。

+ 打开一个文件进行更新(可读可写)。

r 只读。开头。这是默认模式。

rb 二进制只读。开头。

r+ 读写。文件指针将会放在文件的开头。

rb+ 二进制读写。开头。

w 写入。开头开始编辑,覆盖。不存在就创建。

wb 二进制写入。从开头开始编辑,覆盖

w+ 读写。从开头开始编辑,会覆盖。不存在就创建新文件。

wb+ 二进制于读写。开头开始编辑,会覆盖。不存在就建新。

a 追加。指针在结尾。不存在就会创建

ab 二进制追加。从结尾编辑。不存在就创建

a+ 读写。从结尾编辑。不存在会创建

ab+ 二进制追加。从结尾编辑。不存在就创建



# open() 方法;文件打开

file.close() 关闭文件。关闭后文件不能再进行读写操作。

file.flush() 刷新文件内部缓冲,立刻写入文件

file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

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

file.next() 返回文件下一行。


file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。

file.readline([size])  读取整行,包括 "\n" 字符。

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

file.seek(offset[, whence])

移动文件读取指针到指定位置

file.tell() 返回文件当前位置。

file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。


file.write(str) 将字符串写入文件,返回的是写入的字符长度。

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

# Python修改文件案例

#!/usr/bin/python3

import os

def Replace(file_name, rep_word, new_word): # 定义一个字符串函数Replace [rəˈpleɪs] 替换,属性有变量,方法如下:

    with open(file_name) as f: # 用with语句来得保险

        content = [] # [kənˈtɛnt] 目录内容

        count = 0 #  [kaʊnt] 计数;初始化变量值为 0 


        for eachline in f: # 定义循环变量 each  line  [itʃ]  每  [laɪn] 一行;online 在线

            if rep_word in eachline: # 循环中判断;用户输入是文件中的字符串就

                count += eachline.count(rep_word) # 变量 count = count + 原字符串行数

                eachline = eachline.replace(rep_word, new_word) # replace [rəˈpleɪs] 替换,原字符串替换为新字符串

            content.append(eachline) # content [kənˈtɛnt] 目录文件; append [əˈpɛnd] 追加; 方法是 eachline  替换字符串


        decide = input('文件 {0} 中共有{1}个【{2}】\n您确定要把所有的【{3}】替换为【{4}】吗?\n【YES/NO】:'.format\

                (file_name, count, rep_word, rep_word, new_word)) # input 输入函数; decide  [dəˈsaɪd] 决定; 

        if decide in ['YES', 'Yes', 'yes']:

            with open(file_name, 'w') as f:

                f.writelines(content) # writelines() 方法用于向文件中写入一序列的字符串。write lines 写入行

            print('Succeed!')

        else:

            print('Exit!')


if __name__ == '__main__': # 当.py文件被直接运行,则它的代码被运行

# 当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行

    while True:

        file_name = "11.txt"

        if file_name in os.listdir():                                                            # os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表

            rep_word = "as"

            new_word = '''

替换后字符串,第一行

第二行

''' # 可以替换为多行字符串变量: new_word = '''  此处可以换行 ''' ; 三个点位注释;

            Replace(file_name, rep_word, new_word)

            break # 执行成功一次,就退出循环。不成功就

        else:

            print('Do not find such a file {}'.format(file_name))








####################  python在文件指定位置插入字符串   #######################

在a文件的keyword之后插入字符串str


file = open(‘a’,'r')

content = file.read()

post = content.find(keyword)

if post != -1:

content = content[:post+len(keyword)]+str+content[post+len(keyword):]

file = open(‘a’,'w')

file.write(content)

file.close()


# content[:post]读取的是keyword之前的内容,content[post:]读取的是包括keyword在内的之后的内容。所以要在keyword之后插入str需是用content[:post+len(keyword)]与content[post+len(keyword):]


####################  替换后的内容保存到新文件  #######################

#!/usr/bin/python3

import os # 导入模块

a="eisc.cn" # 匹配这个字符串变量 

b="需要修改为 xxx.xxx.xxx.xxx" # 修改后的字符串

s=0 # 初始化次数变量 s

f1=open('11.txt','r',encoding='utf-8') # 以“r”(只读)模式打开旧文件;   encoding [ɪn'koʊdɪŋ] 编码

f2=open('22.txt','w',encoding='utf-8') # 以“w”(写) 覆盖模式打开或创建新文件(写模式下,文件存在则重写文件,文件不存在则创建文件) 

# 参考 : python文件操作及文件增删改查


for i in f1: # 循环变量 i 是 f1 文件

        if a in i: # 判断变量字符串 a 是f1 文件中的字符串,就开始

                i=i.replace(a,b) # 循环执行替换函数,i 里面的字符替换,将a变量字符串替换为b变量字符串。replace [rəˈpleɪs] 替换

                s += 1 # 每修改一次,变量就会本身的值,再加1 

        f2.write(i) # [raɪt] 写; 将修改后的内容后的内容写入新文件

print("文件修改的次数:",s)

f1.close() # 关闭文件f1 (同时打开多个文件时,先打开的先关闭,后打开的后关闭)

f2.close()

os.replce('22.txt','33.txt') # 调用 os 方法的替换函数,文件重命名 


####################  直接替换当前文件中的字符  #######################

#!/usr/bin/python3

import re

a="eisc.cn"

b="xxx.xxx.xxx.xxx"

f=open('11.txt','r') # 打开文件,方式为可读, r 读  w写 x执行

x=f.readlines() # f.readlines() 文件中包含的所有行。read lines [rid] (ruai d) [laɪn] 读取所有行

f.close() # [kloʊs] 关闭

f=open('11.txt','w+') # 可写

for i in x: # 循环所有行

        a=re.sub(a,b,i)

        f.writelines(a) # writelines() 方法用于向文件中写入一序列的字符串。

f.close()





##########################################  以占用磁盘空间的方式修改文件  ########################################################

#!/usr/bin/python3

#!-*-coding:utf-8-*-

old_str = '汪淼'

new_str = 'WM'

f1 = open('word1.txt','r+',encoding="utf-8") # 以读写方式打开,可读可写

data = f1.read()  # 读取文件内容

print(f1.tell()) # 4574 tell() 方法返回文件的当前位置,即文件指针当前位置。

f1.seek(0) # seek() 方法用于移动文件读取指针到指定位置。

for i in data: # 循环读取

    if old_str in data:

        data=data.replace(old_str,new_str)  # 用新字符串替换旧字符串

print(data)  # 打印修改后的内容

f1.write(data) # 向文件中写入内容(data),默认是utf-8

f1.truncate()  # 用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。

f1.close()  # 关闭文件


#################################################  以占用内存的方式修改文件  ###############################################


提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:Python3 File(文件) 方法

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息