python文件操作

其他的相关知识

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
学生几次啊撒这是我刚写进去的 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值