10-文件的操作
2018-10-30 本文已影响1人
努力爬行中的蜗牛
文本文件和二进制文件
文本文件可以使用文本编辑器查看,本质还是二进制文件。
二进制文件保存的文件不是给人直接阅读的,而是提供给其他软件使用的,如图片,音频,视频。
文件的基本操作
- 打开文件
- 读写文件
- 关闭文件
操作文件的操作函数
函数名/方法 | 描述 |
---|---|
open | 打开文件,并且返回文件对象 |
read | 读取文件内容到内存 |
write | 将制定内容写入文件 |
close | 关闭文件 |
read方法-读取文件
open函数的第一个参数是要打开的文件名
- 如果文件存在,则返回文件操作对象
- 如果文件不存在,则抛出异常
read可以一次性读取文件所有内容。
close方法负责关闭文件。
如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的操作
# 打开文件
file = open("README")
# 读取文件
text = file.read()
print(text)
# 关闭文件
file.close()
文件指针
- 文件指针标记从哪个位置读取文件
- 第一次打开文件时,通常文件指针会指向文件开始的位置
- 当执行了read方法后,文件指针会移动到文件末尾(默认情况下会移动到文件末尾)
# 打开文件
file = open("README")
# 读取文件
text = file.read()
print(text)
print("-" * 50)
text = file.read()
print(text)
# 关闭文件
file.close()
打开文件的方式
open函数默认以只读方式打开文件。
语法:
f = open("文件名","打开方式")
访问方式 | 描述 |
---|---|
r | 以只读方式打开文件,文件指针默认会指向文件的开始位置。 |
w | 以只写方式打开文件,如果文件存在会被覆盖,如果不存在,会创建新的文件 |
a | 以追加方式打开文件,如果文件存在,则文件指针会指向文件末尾,如果不存在,会创建新文件进行写入 |
r+ | 以读写方式打开文件,文件指针会指向文件的开始位置, 如果文件不存在,会抛出异常 |
w+ | 以读写方式打开文件,如果文件存在会被覆盖,如果不存在,会创建新的文件 |
a+ | 以读写方式打开文件,如果文件存在,则文件指针会指向文件末尾,如果不存在,会创建新文件进行写入 |
# 打开文件
file = open("README", "a")
# file = open("README", "w")
# 写入文件
file.write("python")
# 关闭文件
file.close()
按行读取文件内容
readline方法
- readlie一次只能读取文件一行内容
- 方法执行后,文件指针会移动到下一行,准备再次读取
# 打开文件
file = open("README")
# 读取文件一行内容
while True:
text = file.readline()
# 判断是否读取到内容
if not text:
break
print(text)
# 关闭文件
file.close()
小文件复制
# 打开文件
file_read = open("README")
file_write = open("README_COPY", "w")
# 读写
text = file_read.read()
file_write.write(text)
# 关闭文件
file_read.close()
file_write.close()
大文件复制
# 打开文件
file_read = open("README")
file_write = open("README_COPY", "w")
# 读写
while True:
# 读取第一行内容
text = file_read.readline()
# 判断是否读取到内容
if not text:
break
file_write.write(text)
# 关闭文件
file_read.close()
file_write.close()
文件或目录常见的管理操作
在python中,如果希望通过程序实现以上功能,需要导入os模块
In [1]: import os
In [2]: os.rename("hello.text", "123.txt")
In [3]: ls
123.txt Downloads/ Music/ hotger/
Applications/ GitBook/ Pictures/ software/
Desktop/ Library/ Public/ study/
Documents/ Movies/ PycharmProjects/ zyx/
In [4]: os.remove("123.txt")
In [5]: ls
Applications/ GitBook/ Pictures/ software/
Desktop/ Library/ Public/ study/
Documents/ Movies/ PycharmProjects/ zyx/
Downloads/ Music/ hotger/
文本文件的编码方式ASCII和UTF8
ASCII编码
- 计算机中有256个字符
- 一个ASCII在内存中占用一个字节的空间
8个0/1的排列组合方式一共有256种,即2 ** 8
UTF8编码方式
- 计算机中使用1-6个字节来表示一个UTF8字符,涵盖了地球上几乎所有的文字。
- 大多数汉字会使用3个字节来表示。
- UTF8是Unicode的编码一种。
python2.x默认使用的ASCII编码
python3.x默认使用的UTF8编码
在python2.x中使用中文
# *-* coding:utf8 *-*
hello_str = "hello 世界"
print(hello_str)
unicode字符串
- 在python2.x中,即使指定使用utf8编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串
- 要能够正确遍历字符串,在定义字符串时,需要在字符串的引号前,加一个小写字符u,告诉解释器这是一个unicode字符串编码格式
# *-* coding:utf8 *-*
# 引号前面的u告诉解释器这是一个utf8编码格式的字符串
hello_str = u"hello 世界"
print(hello_str)
for c in hello_str:
print(c)
eval函数
eval()函数十分强大,将字符串变成有效的表达式来求值,并返回计算结果。
注意:不要直接转换input结果
input_str = input("请输入算术题:")
print(eval(input_str))