python笔记之文件的基本操作和os模块

文件的操作

语法: open(文件路径,访问模式,encoding=编码格式)

文件路径:

  1. 指定路径
    "C:\path\file.txt"
    r"C:\path\file.txt"
    (windows下用""来分隔路径
    unix下用"/"分隔路径)
  2. 不指定路径
    file.txt,会在程序运行的目录下创建
    可以使用os模块改变路径

打开文件的三种访问模式
r:只读模式,默认
w:写入模式(覆盖)
a:追加模式
wb:以二进制形式打开一个文件用于写入一般用于非文本文件,图片

编码格式:
防止中文乱码
GBK
UTF-8

文件的常用方法:
.read() 方法读取文件的全部内容
.seek() 移动指针
.write() 向文件写入字符串
.readline(num) num给数字几,就输出几个字符
.readline() 按行,一行一行的读取文件数据
.readlines() 按行读取全部内容,返回的是一个文件数据列表,每一行是列表的一个元素

对于只读模式(r)来说,如果文件不存在则报错:

file = open("text.txt","r") #text.txt  并不存在  
file.close()  #调用完需要将打开的文件关闭

运行结果:

Traceback (most recent call last):
  File "G:/PyCharm_/python_basic/day08/demo01.py", line 1, in <module>
    file = open("text.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: 'text.txt'

对于写入模式(w)来说,如果文件不存在,仍会报错,但会创建一个新的文件,如果文件已存在将会覆盖原文件.

例如,向C盘一个文件写入"hi!"

file = open(r"C:\Users\123\1.txt","w")
file.write("hi!")
file.close()

执行后,会在 “C:\Users\123\1.txt” 写入 “hi!”

我们使用.read()来读取刚才写进的内容

file = open(r"C:\Users\123\1.txt","r")
print(file.read())
file.close()

运行结果:

hi!  

接下来我们在上述内容后追加内容"good morning!"

#向文本内追加内容  
file = open(r"C:\Users\123\1.txt","a",encoding="utf-8")
file.write(" \ngood morning!")
file.close()
#输入文本里的内容
file1 =open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())

运行结果:

hi!
good morning!

如果我们需要一行一行的输出,可以使用.readline() 或 .readlines()

使用.readline()

file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.readline())
print(file1.readline())

运行结果:

hi!

good morning!

使用.readlines()会生成一个列表,所以下面的内容中,我们把列表遍历输出

#向文本内追加内容
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
# print(file1.readlines()) #使用.readlines() 会生成一个列表
data = file1.readlines()
i = 1
for nr in data:
    print("第{}行内容为{}".format(i,nr))
    i=i+1

运行结果:

第1行内容为hi!

第2行内容为good morning!

注意: 考虑到安全因素,文件调用完记得使用 file.close()将文件关闭.

.read() 和 .seek()
当我们使用 .read()输出完内容后,再次调用输出内容为空,是因为指针这时指向了最后,如果我们想要再次输出的话可以使用.seek()来改变指针的位置,从而再次输出.

file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())
print(file1.read())

我们可以看到运行结果,只有一次内容输出

hi!
good morning!


使用.seek()后

file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())
file1.seek(0)
print(file1.read())

运行结果:

hi!
good morning!
hi!
good morning!

.readline(num)的用法
例如,我们输出该文件的第一个字符

file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
data1 = file1.readline(1)
print(data1)

运行结果:

h
安全的打开文件(自动调用.close())
with open("test.txt","w",encoding="utf-8") as f:
    f.write("测试写入")

with open("test.txt","r",encoding="utf-8") as f:
    for line in f:
        print(line,end="")

运行结果:

测试写入
利用os模块对文件的一些基本操作

使用内置模块时需要先引用
所以使用: import 引用
对路径可以加\表示是路径,也可以在前面加R或者r表示

import os
os.mkdir(r"C:\Users\123\one")  #在某个路径下创建文件夹,对C盘操作可能没有权限,会报错

print(os.getcwd())  #获取程序运行的当前目录

print(os.chdir(r"E:\1111")) #改变到某个目录下
print(os.getcwd())

os.chdir("../")  #切换到上级目录
print(os.getcwd())

a=os.listdir(r"E:\1111") #获取指定目录下的文件列表
print(a)

 os.rmdir(r"E:\1111")     #删除空的文件夹

import  shutil
shutil.rmtree(r"E:\1111\444")  #删除非空的文件夹