其他的相关知识
1、表示文件或文件夹有两种方式,即相对路径和绝对路径,绝对路径是从根文件夹开始,相对路径是从相对于程序的当前目录来算(os.getcwd()),相对路径使用./开头,或者直接使用文件名。绝对路径使用 / 或者盘符/开头
print(os.path.isabs("一级/二级/s")) #False
print(os.path.isabs("./一级/二级/s")) #False
print(os.path.isabs("/一级")) #True
print(os.path.isabs("C:/一级")) #True 盘符/
print(os.path.isabs("Z:/一级")) #True 盘符/
print(os.path.isabs("z:/一级")) #True 盘符/
print(os.path.isabs("AD:/一级")) #False 不是盘符,所以当成了文件夹,整体就成了相对路径
由上例可知,盘符必须是一个字母(大小写不限)和一个冒号,在判断绝对和相对时,可以直接不看盘符以斜杠或反斜杠(根据系统)开头的就是绝对路径,否则以 . / 或 . \或者直接文件名的就是相对路径所以盘符是个很奇怪的东西,好像不参与路径一样,只是一个标志。
3、.文件夹和**..**文件夹分别表示这个目录和上一级目录
3、对于文件夹,字符串表示时,最后可以跟斜杠或反斜杠,也可以不跟,都表示这个文件夹,.文件夹和..文件夹也不例外。
当前文件夹 | . | ./ | .\ |
---|---|---|---|
上一级文件夹 | .. | ../ | ..\ |
4、在windows的命令提示符中,在路径之间来回跳转使用的是cd(切换到其他盘时除外)
cd . #选择当前目录
cd .\ #同上
cd .. #选择上一级目录
cd ..\.. #选择上一级目录的上一级
cd ..\外面的文件夹 #选择上一层目录中的一个文件夹
cd ..\外面的文件夹\ #同上
D: #跳转到D盘
C: #跳转到C盘
从中我们可以知道cd 可以连续跳好几层文件夹,切换到哪个盘,直接写就行了,而且不用加斜杠
open(文件名,打开模式) 打开文件
1、文件名可以是相对路劲或绝对路径,如果找不到这个文件就会创建一个
(对于这个路径,C:\Users\lenovo\Desktop\sent.txt,如果C:\Users\lenovo\Desktop\路径存在,只是不存在sent.txt文件,那么就会建立一个sent.txt文件,但是如果是前面的文件夹路径都不存在就不会建立文件直接报错FileNotFoundError。也就是新建文件只能是建立一个文件,而不会建立文件夹)
2、打开模式
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
---|---|
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。 |
----- | ------------------------------------------------------------------------------------------------------------------------- |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 |
wb+ | 以二进制格式打开一个文件用于读写。如果改文件已存在则会覆盖。如果改文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果改文件不存在,创建新文件用于读写。 |
文件打开之后,如果写完了,或者数据读取完了并且保存到了一个变量里面了(用来后续的操作)就可以退回一个制表符了,免得都挤在with open的缩进下面。
with open("C://Users//Desktop//数据//data.txt","r") as fp:
data = fp.readlines()
for i in data: #不需要把这个for循环也缩进在with open后面了
print(i)
文件读写
open() r读w写a添加
read() 全部读取
readlines() 每个字符串最后都是\n,除了最后一个
readline() 每个字符串最后都是\n,除了最后一个
write() 最后不加换行符
前面使用了open()获取了文件的指针,并且获得了文件读、写的权限,下面就可以对文件进行读写操作。
1、read(n)
read(n)可以从文件中读取数据,n表示要从文件中读取的数据的长度(单位是字符或字节,默认是字符),如果没有传入n,那么就表示读取文件中的所有数据
file = r"C:\Users\lenovo\Desktop\sent.txt"
with open(file,"r") as fp:
word = fp.read(4)
print(word)
#oo好o
2、readlines(n)
无参时,按照行的方式把整个文件中的内容进行一次性的读取,并且返回的是一个列表,其中每一行的数据为一个元素。
指定参数n时,n并不是读取几行,而是字符数(或者字节数,默认是字符数),读取到指定的字符数所在的行(也就是不满一行,按一行算)
file = r"C:\Users\lenovo\Desktop\sent.txt"
with open(file,"r") as fp:
word = fp.readlines(1)
print(word)
#['oo好oo\n']
print(fp.readlines(10))
#['ucbduibc\n', '学生几次啊撒']
3、readline()
一次就读取一行
它本身读取了每一行最后的换行符,再加上print的最后换行,就会多一个换行符
file = r"C:\Users\lenovo\Desktop\sent.txt"
with open(file,"r") as fp:
word = fp.readline()
print(word)
print(fp.readline())
#oo好oo
#ucbduibc
4、write(str)
将字符串str写入文件,并且不会自动再输入内容后加换行符
file = r"C:\Users\lenovo\Desktop\sent.txt"
with open(file,"a") as fp:
fp.write("这是我刚写进去的")
python对文件、文件夹的操作
python文件操作一般都是借助os模块
得到当前工作目录,即当前Python脚本工作的目录路径: | os.getcwd() |
---|---|
返回指定目录下的所有文件和目录名: | os.listdir() |
删除一个文件: | os.remove() |
删除多个目录: | os.removedirs(r“c:\python”) |
检验给出的路径是否是一个文件: | os.path.isfile() |
检验给出的路径是否是一个目录: | os.path.isdir() |
检验给出的路径(文件或文件夹)是否存在: | os.path.exists() |
返回一个路径的目录名和文件名: | os.path.split() |
分离扩展名: | os.path.splitext() |
获取路径名: | os.path.dirname() |
获取文件名: | os.path.basename() |
判断是否是绝对路径: | os.path.isabs() |
常量,非方法,获取当前操作系统的分隔符 | os.path.sep |
------------------------------------以上的大多都是os.path.------------------------------- | -------------------------------- |
重命名: | os.rename(old, new) |
创建多级目录: | os.makedirs(r“c:\python\test”) |
创建单个目录: | os.mkdir(“test”) |
获取文件大小: | os.path.getsize(filename) |
创建空文件: | os.mknod(“test.txt”) |
获取工作目录 | os.getcwd() |
用法:
1、os.path.sep可以与字符串的spilt()结合,作用不同于os.path.split()
详解os.path.join():
里面可以有多个参数,但是一般只放进两个参数,所以只考虑两个参数时a , b。如果两个都是相对路径,那么直接链接在一起,如果都是绝对路径则返回b的绝对路径表示,如果a是相对路径b是绝对路径,则也返回b的绝对路径表示,(其中最后两种情况也是有区别的,因为如果a是绝对路径时,并且他的前面有盘符,但是b这个绝对路径没有盘符,那么就会返回有盘符的b的绝对路径)
file = os.path.join(r"C:\Users\lenovo\Desktop",r"\文献统计.txt")
#C:\文献统计.txt
file = os.path.join(r"\Users\lenovo\Desktop",r"\文献统计.txt")
#\文献统计.txt
file = os.path.join(r"Users\lenovo\Desktop",r"\文献统计.txt")
#\文献统计.txt
import os
file = r"C:\Users\lenovo\Desktop\sent.txt"
print(os.listdir("C:/Users/"))
#['All Users', 'Default', 'Default User', 'desktop.ini', 'lenovo', 'Public']
print(os.listdir("C:/Users"))
#['All Users', 'Default', 'Default User', 'desktop.ini', 'lenovo', 'Public']
print("分离扩展名:",os.path.splitext(file))
#分离扩展名: ('C:\\Users\\lenovo\\Desktop\\sent', '.txt')
"""文件夹,也就是路径,最后可以跟\,也可以不跟,结果一样"""
print("获取路径名:",os.path.dirname(file))
#获取路径名: C:\Users\lenovo\Desktop
print("获取文件名:",os.path.basename(file))
#获取文件名: sent.txt
print(os.path.isfile(file))
#True
print(os.path.isdir(file))
#False
os.rename(file,r"C:\Users\lenovo\sent.txt")#可以改变路径名,实现了我文件的移动
简单的按行读取
file = r"C:\Users\lenovo\Desktop\sent.txt"
with open(file,"r") as fp:
for i in fp:
print(i,end = "")
oo好oo
ucbduibc
学生几次啊撒这是我刚写进去的