ASCII(美国标准码):最早的字符编码之一,用于表示英文字母、数字和一些常用符号。它使用7位二进制数表示字符,共计128个字符。
UTF-8(Unicode转换格式-8位):一种通用的字符编码,可以表示世界上几乎所有的字符,包括各种语言的文字和特殊符号。UTF-8使用可变长度的编码方式,一个字符可以占用1到4个字节。
UTF-16(Unicode转换格式-16位):另一种Unicode编码方式,它使用16位二进制数表示字符,可以表示更多的字符,但在某些情况下会浪费存储空间。
UTF-32(Unicode转换格式-32位):使用32位二进制数表示每个字符,能够表示更广泛的Unicode字符范围,但同样会浪费存储空间。
ISO-8859系列:一系列字符编码,每个编码用于特定的字符集,如ISO-8859-1用于西欧语言字符,ISO-8859-5用于西里尔字母等。
GB2312、GBK、GB18030:主要用于中文字符的编码,GB2312是早期的中文编码,GBK和GB18030对字符集进行了扩展,以支持更多的字符。
Big5:用于繁体中文字符的编码,主要用于台湾和香港地区。
- 注意:可以只打开和关闭文件,不进行任何读写
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file
:要打开的文件的路径。mode
:打开文件的模式,可以是 'r'
(只读)、'w'
(只写,如果文件已存在则覆盖)、'a'
(追加)、'b'
(二进制模式,如 'rb'
)、't'
(文本模式,如 'rt'
)等。buffering
:缓冲设置,控制读写操作的缓冲行为。通常为 -1
(系统默认缓冲方式)、0
(无缓冲)、正整数(缓冲区大小)。encoding
:指定读写文件时使用的字符编码(仅在文本模式下有效)。errors
:指定在编解码错误时的处理方式。newline
:控制换行符的处理,可以是 None
(使用系统默认)、''
(不转换换行符)、'\n'
(强制使用换行符)等。closefd
:如果为 True
(默认),则关闭文件描述符。对于文件名、文件描述符和文件对象都有效。opener
:自定义打开文件的函数,通常不需要使用。示例:
# 以只读模式打开文件
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# 以写入模式创建或覆盖文件
with open('output.txt', 'w') as file:
file.write('Hello, World!')
# 以追加模式打开文件
with open('log.txt', 'a') as file:
file.write('New log entry')
# 以二进制模式读取图片文件
with open('image.jpg', 'rb') as file:
image_data = file.read()
# 以文本模式读取文件,并指定字符编码
with open('data.txt', 'r', encoding='utf-8') as file:
content = file.read()
# 以写入模式打开文件,并指定字符编码为UTF-8
with open('output.txt', 'w', encoding='utf-8') as file:
file.write('Hello, World!')
# 以只读模式打开文件,并指定字符编码为UTF-8
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
open()
打开文件后,务必在合适的地方使用 close()
方法关闭文件,或者更好的方式是使用 with
语句块,它会在退出代码块时自动关闭文件,避免资源泄露和错误。open()
函数打开文件时,可以通过mode
参数指定访问模式。模式 | 描述 |
---|---|
'r' |
读取模式,打开文件进行读取。如果文件不存在,会引发错误。 |
'w' |
写入模式,打开文件进行写入。如果文件存在,会截断文件内容;如果文件不存在,会创建新文件。 |
'a' |
追加模式,打开文件进行写入,但不截断文件内容。如果文件不存在,会创建新文件。 |
'b' |
二进制模式,用于读取或写入二进制数据。可以与其他模式一起使用,如 'rb' 或 'wb' 。 |
't' |
文本模式,用于读取或写入文本数据(默认模式)。可以与其他模式一起使用,如 'rt' 或 'wt' 。 |
'x' |
独占创建模式,用于创建新文件,如果文件已经存在则引发错误。 |
'+' |
读写模式,可以同时读取和写入文件。可以与其他模式一起使用,如 'r+' 或 'w+' 。 |
open
函数的文件对象open()
函数返回一个文件对象,通过该对象可以对文件进行读写操作。文件对象提供了多个方法来读取和写入文件内容。read(size=-1)
:从文件中读取指定数量的字符(字节),如果未指定数量,则会读取整个文件内容。返回值是一个包含读取内容的字符串。
readline()
:从文件中读取一行内容,包括行末换行符。返回值是一个字符串,如果到达文件末尾,则返回空字符串。
readlines()
:从文件中读取所有行,将其存储在列表中,每一行是列表中的一个元素。
write(string)
:将给定的字符串写入文件。返回值是写入的字符数。
writelines(lines)
:将字符串列表写入文件,不添加额外的换行符。
seek(offset, whence=0)
:移动文件指针到指定位置。offset
表示偏移量,whence
指定偏移相对位置(0表示文件开头,1表示当前位置,2表示文件末尾)。
tell()
:返回当前文件指针的位置。
close()
:关闭文件。在文件操作结束后应该调用这个方法以释放文件资源。
flush()
:将缓冲区中的数据立即写入文件。
__enter__()
和 __exit__()
:用于支持 with
语句块,自动管理文件的打开和关闭。
示例使用:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
with open('output.txt', 'w') as file:
file.write('Hello, World!')
with open('data.txt', 'r') as file:
for line in file:
print(line)
with open('lines.txt', 'w') as file:
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
file.writelines(lines)
read(size=-1)
:从文件中读取指定数量的字符(字节),如果未指定数量,则会读取整个文件内容。返回一个包含读取内容的字符串。with open('example.txt', 'r') as file:
content = file.read()
print(content)
readline()
:从文件中读取一行内容,包括行末换行符。返回一个字符串,如果到达文件末尾,则返回空字符串。with open('example.txt', 'r') as file:
line = file.readline()
print(line)
readlines()
:从文件中读取所有行,将其存储在列表中,每一行是列表中的一个元素。with open('example.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line)
with open('example.txt', 'r') as file:
for line in file:
print(line)
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
# 打开文件,以读取模式打开
f = open("D:/word.txt", "r", encoding="UTF-8")
# 方式1:读取全部内容,通过字符串count方法统计itheima单词数量
content = f.read()
count = content.count("itheima")
print(f"itheima在文件中出现了:{count}次")
# 方式2:读取内容,一行一行读取
count = 0 # 使用count变量来累计itheima出现的次数
for line in f:
line = line.strip() # 去除开头和结尾的空格以及换行符
words = line.split(" ")
for word in words:
if word == "itheima":
count += 1 # 如果单词是itheima,进行数量的累加加1
# 判断单词出现次数并累计
print(f"itheima出现的次数是:{count}")
# 关闭文件
f.close()
write(string)
:将给定的字符串写入文件,返回值是写入的字符数。
with open('output.txt', 'w') as file:
file.write('Hello, World!')
writelines(lines)
:将字符串列表写入文件,不添加额外的换行符。
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('lines.txt', 'w') as file:
file.writelines(lines)
文件迭代器写入:通过循环将内容逐行写入文件。
lines = ['Line 1', 'Line 2', 'Line 3']
with open('lines.txt', 'w') as file:
for line in lines:
file.write(line + '\n')
flush()
:将缓冲区中的数据立即写入文件。
with open('output.txt', 'w') as file:
file.write('Hello')
file.flush() # 立即将数据写入文件
追加模式:使用'a'
模式来追加内容到文件而不覆盖已有内容。
with open('log.txt', 'a') as file:
file.write('New log entry')
在使用 with 语句块的情况下,通常不需要显式地调用 flush() 方法,因为 with 块结束时会自动执行必要的刷新操作。只有在需要强制刷新缓冲区的特殊情况下才需要使用 flush() 方法。
在使用完毕后,记得关闭文件以释放资源,最好的做法是使用 with
语句块。
文件的写入操作也可能会引发异常,特别是当文件无法写入或权限不足时。在进行文件写入操作时,最好使用异常处理来捕获潜在的问题。
name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式
source_file = "C:/Users/HP/Desktop/bill.txt"
target_file = "C:/Users/HP/Desktop/bill.txt.bak"
# 打开源文件进行读取,并创建目标文件进行写入
with open(source_file, "r", encoding="UTF-8") as fr, open(target_file, "w", encoding="UTF-8") as fw:
# for循环读取文件
for line in fr:
line = line.strip()
# 判断内容,将满足的内容写出
if line.split(",")[4] == "测试":
continue # continue进入下一次循环,这一次后面的内容就跳过了
# 将内容写出去
fw.write(line)
# 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fw.write("\n")
source_file = "C:/Users/HP/Desktop/bill.txt"
target_file = "C:/Users/HP/Desktop/bill.txt.bak"
# 打开源文件进行读取,并创建目标文件进行写入
with open(source_file, "r", encoding="UTF-8") as fr, open(target_file, "w", encoding="UTF-8") as fw:
for line in fr:
if "测试" in line:
continue
fw.write(line)