Python Learning-文件处理


读取文件

建一个txt文件,命名为data.txt内容如下:

Hello, my name is Jack.
I'm 25 years old.

另新建一个read_file.py文件,并将data.txt与read_file.py文件置于同一目录下

开始用代码读取data.txt中的内容

with open('data.txt') as file_txt:
    contents = file_txt.read()
    print(contents)

输出:

Hello, my name is Jack.
I’m 25 years old.

open方法会打开一个文件,并返回一个文件对象(file对象)

as将返回的file对象重新命名,方便使用

file.read()表示读取文件中内容

在读取文件的时候,需要对文件进行打开操作,在操作完毕后,必须将文件关闭,否则该文件会一直被占用,opne()可以打开文件,close()则将文件关闭;但是如果程序有报错等问题,代码会无法执行到close()语句上;with关键字表示在访问文件一旦不再被访问,则将文件关闭,这样避免了忘记关闭或未正常关闭的风险

open()参数

file object = open(file_name [, access_mode][, buffering])

file_name是文件名,如果与代码文件在同一目录,则只提供文件名即可,如果不在同一目录下,则需要按相对路径绝对路径的方式传入文件的地址

绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件

相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件

../ 表示当前文件所在的目录的上一级目录

./ 表示当前文件所在的目录(可以省略)

/ 表示当前站点的根目录(域名映射的硬盘目录)

例如,data.txt的地址在C:\Users\Administrator\Desktop\code\data目录下,read_file.py文件在C:\Users\Administrator\Desktop\code\code目录下

# 相对路径 
file1 = open('../data/data.txt')
# 等同于 file1 = open('..\\data\\data.txt')
print(file1.read())
file1.close()

# 绝对路径 
file2 = open(r'C:\Users\Administrator\Desktop\code\data\data.txt')
print(file2.read())
file2.close()

注意,windows平台下,表示路径层级关系时用反斜杠\,而\又表示转译的意思,因此需要通过\\来表示一个实际意义上的反斜杠,也可以在文件地址字符串前加一个r,告诉Python这是一个地址,不要对\进行转译

access_mode是一个可选的参数,表示打开的方式,常用可取值如下:

  • r以只方式打开文件,这是默认模式,从头开始读取
  • r+打开文件并支持读写,从头开始读写
  • w打开文件只允许写入,如果文件存在,则从头开始写入(原文件被覆盖),如果文件不存在,则创建新文件
  • w+打开文件用于读写,如果文件存在,则从头开始读写(原文件被覆盖),如果文件不存在,则创建新文件
  • a打开一个文件用于追加(写入),即文件被写入到末尾;如果文件不存在,则会创建新文件
  • a+打开一个文件用于在末尾读写,如果文件不存在 ,则会创建新文件

buffering是一个可选参数,表示寄存区大小,略

上面例子中,read()是将整个文件读取出来的,如果想要一行一行的读取文件,可以使用循环

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name) as file_txt:
    for line in file_txt:
        print(line)

输出:

Hello, my name is Jack.

I’m 25 years old.

中间有空行,因此在txt文件末尾有一个看不见的换行符,所以打印出来后会多出来空行

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name) as file_txt:
    for line in file_txt:
        print(line.strip())

输出:

Hello, my name is Jack.
I’m 25 years old.

使用strip()函数去除多余的空行(strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列)

另一种方法

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name) as file_txt:
    lines = file_txt.readlines()

# 输出内容
for line in lines:
    print(line.strip())

输出:

Hello, my name is Jack.
I’m 25 years old.

readlines()将文件中的内容按行读取,并存储到一个列表中

虽然lines变量是在with代码块中定义的,但是在with代码块之外依然可以访问得到

写入文件

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name, 'w+') as file_txt:
    file_txt.write('I like playing basketball!')

运行结果:

原来的内容被覆盖,在开头写入一新内容

写入多行

这里要强调的是,因为在写入文件的时候,一行内容结尾是没有换行符的,所以如果要写入多行内容,需要手动添加换行符

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name, 'w+') as file_txt:
    file_txt.write('I like playing basketball!\n')
    file_txt.write("I don't like vegetables!\n")

运行结果:

如果不想将原有的内容覆盖掉,可以使用a参数

# 将文件地址保存到一个变量中
fine_name = '../data/data.txt'

# 打开文件,按行循环处理
with open(fine_name, 'a') as file_txt:
    file_txt.write('I like playing basketball!\n')
    file_txt.write("I don't like vegetables!\n")

运行结果:

新的内容被追加到原有内容的末尾

对文件进行重命名、删除等操作

import os

# 重命名文件test1.txt到test2.txt。
os.rename( "../data/data.txt", "../data/data_file.txt" )

运行结果

rename()方法存在于os模块下,所以必须先引用os模块

删除文件

os.remove('../data/data_file.txt')

文件夹操作

创建文件夹

import os

# 在当前目录下创建new_file文件夹
os.mkdir("new_file")

运行结果:

删除文件夹

os.rmdir('new_file')

new_file文件夹将删除

json数据

保存json数据

# 引用json模块
import json

# 要保存的内容
words = "hello world!"
# 保存地址
filename = 'hello.json'
# 打开文件写入json数据
with open(filename,'w') as f:
    json.dump(words, f)

读取json数据

# 引用json模块
import json

# 保存地址
filename = 'hello.json'
# 打开文件写入json数据
with open(filename,'r') as f:
    words = json.load(f)

print(words)

json.dump()存储数据

json.load()加载数据

目录
上一章 Python Learning-面向对象编程-类 二
下一章 Python Learning-异常处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值