1

13文件操作 - 大-锅

 1 year ago
source link: https://www.cnblogs.com/daguo118/p/17316006.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

文件操作#

文件读写#

  • 语法:open(file, mode, encoding)
  • 参数:file —— 文件所在位置(相对路径、绝对路径) mode —— 操作文件的模式 encoding —— 文件的编码格式
    • 相对路径:基于目前的路径获取
    • 绝对路径:一个完整的路径
  • 操作文件的模式:r-读 w-写 a-追加
模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
  • 常用编码格式:utf-8 gbk gb2312

读写操作方法#

模式 介绍
read(s) 不填写s就读取所有文件内容,填写读取指定长度数据
write() 写入字符串或进制文件
writelines() 写入以列表保存的字符串或进制文件
readline() 以行读取数据
readlines() 读取所有数据存放列表

只写模式w#

  • **f.writable() **          -->  判断是否可写
  • **f.write(str) **          -->  写入内容,返回值为写入字符串的长度
  • **f.writelines(seq) ** --> 写入多行,但需要自己添加换行符

注意:

  • w模式,当文件不存在时创建文件
  • 再次写入会覆盖
f = open('filetest.txt', mode='w', encoding='utf-8')

# 判断是否可写
print(f.writable())
# 写入内容
f.write('i am yueyue\nasdasda\n')
# 写入多行
f.writelines('I love You\nasdasdasdsad')
# 关闭文件
f.close()

追加模式a#

注意

  • a模式,当文件不存在时创建文件
  • 再次写入为追加
f = open('filetest.txt', mode='a', encoding='utf-8')
# 判断是否可写
print(f.writable())
# 写入内容
f.write('i am yueyue\nasdasda\n')
# 写入多行
f.writelines('I love You\nasdasdasdsad')
# # 关闭文件
f.close()

w 和 a 模式:如果文件不存在则创建该文件;如果文件存在,w 模式先清空再写入,a 模式直接末尾追加。

只读模式r#

  • f.readable()           --> 判断是否可读,返回值为布尔
  • f.read(n)               --> 读取全部,在python3中n为字符
  • f.readline()            --> 逐行读取,包括\n
  • f.readlines()          --> 读取所有,返回值为列表,包括\n
  • **f.tell()                **--> 文件指针所处文件位置
  • **seek() --> **作用:用来移动文件指针
f = open('filetest.txt', mode='r', encoding='utf-8')
# 判断是否可读
print(f.readable())
# 逐行读取
print(f.readline(),end='')
# 读取所有 返回值为列表
print(f.readlines())
# # 读取文件全部内容
print(f.read())

1)tell的使用

f = open("filetest.txt", mode="r", encoding="utf-8")
'''
filetest2.txt
helloworld
你好
'''
# 汉字代表三个字节 换行代表两个字节  字母数字代表的是一个字节
print(f.tell())
print(f.readline(), end="")
print(f.tell())
print(f.readline())
print(f.tell())

2)seek的使用

f = open("filetest.txt", mode="rb")
'''
filetest2.txt
helloworld
你好
'''

# 改变指针位置
"""
offset: 偏移量
whence: 0 从文件头开始  1 当前位置开始  2 文件尾
注意,当offset值非0时,Python要求文件必须要以二进制格式打开,
否则会抛出 io.UnsupportedOperation 错误。
"""
print(f.tell())
# 读取一个字节,文件指针自动后移1个数据
print(f.read(1))
print(f.tell())
# 将文件指针从文件开头,向后移动到 5 个字符的位置
f.seek(5)
print(f.tell())
print(f.read(1))
# 将文件指针从当前位置,向后移动到 5 个字符的位置
f.seek(5, 1)
print(f.tell())
print(f.read(1))
# 将文件指针从文件结尾,向前移动到距离1个字符的位置
f.seek(-1, 2)
print(f.tell())
print(f.read(1))

文件备份#

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx备份后缀,例如:test备份.txt)

  1. 接收用户输入的文件名
  2. 规划备份文件名
  3. 备份文件写入数据

代码实现

A、接收用户户输入目标文件名
1、提取目标文件后缀
2、组织备份的文件名,xx备份.后缀

old_name = input("请输入文件名:")
index = old_name.rfind(".")  # rfind()函数从右开始找元素所在索引位置
new_name = old_name[:index]+"备份"+old_name[index:]

B、备份文件写入数据
1、打开源文件 和 备份文件
2、将源文件数据写⼊备份文件
3、关闭文件

old_name = input("请输入文件名:")
index = old_name.rfind(".")
new_name = old_name[:index]+"备份"+old_name[index:]

# 老文件
old_f = open(old_name,"r")
# 新文件
new_f = open(new_name,"w")

cont = old_f.readlines()
print(cont)
new_f.writelines(cont)

old_f.close()
new_f.close()

文件夹操作#

模块.函数 介绍
os.rename() 重命名文件或者文件夹
os.remove() 删除文件
os.mkdir() 创建文件夹
os.makedirs() 以递归方式创建多个文件夹
os.rmdir() 删除文件夹(空文件夹)
os.removedirs() 以递归方式删除多个空文件夹
os.getcwd() 获取当前路径
os.chdir() 改变默认⽬录
os.listdir() 获取文件中的文件
os.path.exists() 判断该路径下的文件或文件夹是否存在
os.path.join() 拼接路径
shutil.copy() 复制文件
shutil.rmtree() 把文件和内容全部删除

批量重命名#

文件夹添加字符串

import os

# 先切换路径  
os.chdir('testsad')
print(os.getcwd())
# 遍历此路径下的文件
file_list = os.listdir(os.getcwd())
print(file_list)
for file in file_list:
    # 循环拼接
    new_name = "python_" + file
    # print(new_name)
    os.rename(file,new_name)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK