当前位置: 首页>后端>正文

Python文件操作

写在前面

无论是哪种编程语言,搬砖的目的都是为了将处理后的数据能够导出供后续使用。Python的文件操作逻辑与R语言有些不同,主要分为打开文件、读写文件、关闭文件三个部分。

一、文件编码

我们在Linux的课程中曾说过,计算机只认识0和1,而硬盘中存储的数据正是以0和1(磁性的强弱)的形式写入。那么将人类可读数据转换为0和1的过程,就成为编码技术(密码本)。计算机的主流编码类型有UTF-8GBK5Big5ANSI等。例如在文本文件另存的时候就可以选择编码格式:

Python文件操作,第1张

目前主流的编码格式为UTF-8,可支持英文、中文、韩文等多种语言。

二、文件基本操作

文件的基本操作为打开文件、读写文件、关闭文件。打开与关闭可以与读写相独立。

11.2.1 文件打开

通过open函数可以打开一个已经存在的文件,并返回一个文件对象。若操作的文件不存在,则创建一个新文件。语法为:
open(name,mode,encoding)
name为打开目标文件名的具体路径,mode为打开文件的模式:
只读r:以只读方式打开文件,文件的指针会放在文件的开头,r为默认模式(即不指定mode值时生效)。
写入w:打开一个文件只用于写入,若文件存在则打开文件,并从文件开头进行写入,即原有内容会被删除。若文件不存在,则自动创建新文件用于写入。
追加a:打开一个文件用于追加,若文件已存在,则新写入的内容会被追加至原文件的末尾。若文件不存在,则创建新文件进行写入。
例如我想在家目录中打开一个叫做Biomamba.txt的文件(预先创建好的):

Python文件操作,第2张
myfile = open(file = './Biomamba.txt',mode = 'r',encoding = "UTF-8")

11.2.2 文件读取

文件对象.read(num)
num表示从文件中读取的长度(以字节为单位),若num没有传入,那么就表示读取文件中的所有数据。

# 读取文件的前十个字节:
fir_file = myfile.read(10)
print(fir_file)
## Biomamba.l
# 返回对象是一个字符串
  print(type(fir_file))

## <class 'str'>
# 第二次读取
sec_file = print(myfile.read(10))
## ine1
## Bioma
print(sec_file) 
# 可以看出第二次读取默认从第一次读取后的末尾开始读取:
## None
# 读取剩下的内容
remain_file = print(myfile.read())
## mba.line2
## Biomamba.line3
print(remain_file)
## None

文件对象.readlines()一次性读取文件中的全部行,返回值是一个列表,其中每一行的数据为一个元素。

myfile = open(file = './Biomamba.txt',mode = 'r',encoding = "UTF-8")
my_context = myfile.readlines()
print(my_context)
# 可以看到我们在文件中写入的三行文件均被读取出来,且特殊字符也会被读入
# 例如下面的换行符\n
## ['Biomamba.line1\n', 'Biomamba.line2\n', 'Biomamba.line3\n']
print(type(my_context))
# 返回对象是一个列表

## <class 'list'>

文件对象.readline()可以逐行读写数据,我们可以配合while循环来演示结果:

myfile = open(file = './Biomamba.txt',mode = 'r',encoding = "UTF-8")
# 逐行读取文件的前三行并打印出来:
temp_num = 1
while temp_num <= 3:
    temp_context = myfile.readline()
    print(f"---------第{temp_num}行的数据----------")
    print(temp_context)
    temp_num += 1
## ---------第1行的数据----------
## Biomamba.line1
## 
## ---------第2行的数据----------
## Biomamba.line2
## 
## ---------第3行的数据----------
## Biomamba.line3

for循环文件对象也可逐行获取文件内容:

myfile = open(file = './Biomamba.txt',mode = 'r',encoding = "UTF-8")
for temp_file in myfile:
    print(temp_file)
## Biomamba.line1
## 
## Biomamba.line2
## 
## Biomamba.line3

11.2.3 文件关闭

如果文件不关闭,则文件处于被占用的状态,无法进行移动、删除等操作。
语法:文件对象.close
例如:

myfile.close()

11.2.4 with open() as

通过这种语句可以在所属代码块运行完毕后自动关闭文件,例如:

with open(file = "./Biomamba.txt",mode= 'r',encoding="UTF-8") as myfile:
    for temp_line in myfile:
        print(temp_line)
## Biomamba.line1
## 
## Biomamba.line2
## 
## Biomamba.line3

做点复杂的操作,通过读取Biomamba.txt文件并统计文本中Biomamba出现的次数:

with open(file = "./Biomamba.txt",mode= 'r',encoding="UTF-8") as myfile:
    file_context = myfile.read()
    my_times = file_context.count('Biomamba')

print(f"Biomamba字符串在文件中出现的次数为{my_times}")
## Biomamba字符串在文件中出现的次数为3

11.2.5 写入文件

主要分为文件打开、文件写入、文件内容刷新三个步骤:

# 1、打开文件
myfile = open("my.new_file.txt",'w')

# 2、写入文件(写在内存缓冲区中)
myfile.write("I am a new file")

# 3、刷新文件(真正的写入并更新文件)
## 15
myfile.flush()
# 我们把刚才创建的文件读入打印检查一下
with open(file = "my.new_file.txt",mode= 'r',encoding="UTF-8") as new_file:
    print(new_file.read())
# 成功输出刚才的内容:
## I am a new file
# close方法也可以自动刷新文件,例如:
myfile = open("noflush_file.txt",'w')
myfile.write("I am a noflush file")
# myfile.flush() #这里我们不刷新文件
## 19
myfile.close()

# 我们把刚才创建的文件读入打印检查一下
with open(file = "noflush_file.txt",mode= 'r',encoding="UTF-8") as noflush_file:
    print(noflush_file.read())
# 成功输出内容,可以看出close方法确实可以完成硬盘写入操作:
## I am a noflush file
# w模式会清空原有内容并写入新文件:
myfile = open("noflush_file.txt",'w')
myfile.write("我被清空并且重写")
## 8
myfile.close()
with open(file = "noflush_file.txt",mode= 'r',encoding="UTF-8") as noflush_file:
    print(noflush_file.read())
# 可以看出原有内容被清空,文件里出现的是新写入的内容:
## 我被清空并且重写

11.2.6 追加文件

a模式与w模式类似,仅仅是模式的不同,操作文件时不会清空原有内容,而是在原文末尾进行追加。

# 1、打开文件
myfile = open("noflush_file.txt",'a')
# 2、写入内容
myfile.write("我是一个追加内容")
# 3、关闭文件
## 8
myfile.close()
# 查看内容追加情况
with open(file = "noflush_file.txt",mode= 'r',encoding="UTF-8") as noflush_file:
    print(noflush_file.read())
# 可以看出新写入的内容被直接追加到文件末尾(没有自动换行)
## 我被清空并且重写我是一个追加内容
# 加入一个换行符
# 1、打开文件
myfile = open("noflush_file.txt",'a')
# 2、写入内容
myfile.write("\n我是一个换行内容")
# 3、关闭文件
## 9
myfile.close()
# 查看内容追加情况
with open(file = "noflush_file.txt",mode= 'r',encoding="UTF-8") as noflush_file:
    print(noflush_file.read())
# 可以看出换行内容被追加在下一行
## 我被清空并且重写我是一个追加内容
## 我是一个换行内容

往期回顾

生信Python速查手册

Python安装(Windows+Linux)

Python的"Rstudio"——Pycharm

码Python神器:jupyter notebook

一文了解Python基础:字面量、注释、变量、类型、运算符

Python判断语句

Python循环语句

Python函数与方法

一文掌握Python数据容器

Python函数进阶

如何联系我们

公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号,方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群

大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容


https://www.xamrdz.com/backend/3j41994280.html

相关文章: