文章目录
利用python查看文件和文件路径信息
os库是python中用来获取文件与文件路径信息相关的库
查看当前的工作目录:os.getcwd() os.chdir()
每个运行在计算机上的程序,都有一个“当前工作目录”,或称cwd。在python中,利用os.getcwd()
函数可以取得当前工作路径的字符串,并且可以利用os.chdir()
改变它。
import os
# 获取当前路径
print(os.getcwd())
# 改变当前路径
os.chdir("/home/ubuntu")
print(os.getcwd())
输出:
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
/home/ubuntu/python_file
/home/ubuntu
值得一提的是,这里的chdir并不会改变终端的当前路径,它只会改变py文件中的当前路径。
创建文件夹: os.makedirs() 📂
python程序可以通过指定一个路径,使用os.makedirs创建文件夹。在这个路径上的所有中间文件夹如果没有创建,都会自动创建。
import os
# 获取当前路径
current_path = os.getcwd()
# 在当前路径下创建file_manage 和中间文件夹files
os.makedirs(current_path+"/files/file_manage")
结果:
os.path模块
os.path模块包含了许多和文件名和文件路径相关的有用函数。完整文档点此:官方文档
处理绝对路径和相对路径
- os.path.abspath(path):返回参数的绝对路径字符串
- os.path.isabs(path):如果参数是绝对路径,就返回true;否则,返回false
- os.path.relpath(path,start):返回从start路径到path的相对路径的字符串
import os
current_path = os.getcwd()
if os.path.isabs(current_path) == True:
print(current_path+" is a absolute path")
# 如果传入.表示当前路径
if os.path.isabs(".") == True:
print(". is not a absolute path")
print("current path is: "+os.path.abspath("."))
print("current path: "+os.path.abspath(".")+" to root dir \"home\" ways is "+os.path.relpath(".","/home"))
输出:
ubuntu@VM-0-2-ubuntu:~/python_file/Python$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
/home/ubuntu/python_file/Python is a absolute path
current path is: /home/ubuntu/python_file/Python
current path: /home/ubuntu/python_file/Python to root dir "home" ways is ubuntu/python_file/Python
获取路径,根据路径获取文件名
- os.path.dirname(path):将返回一个字符串,包含path参数最后一个斜杠之前的所有内容
- os.path.basename(path):返回path参数中最后一个斜杠之后的所有内容
import os
current_name = os.getcwd()+"/Python/file_manage.py"
print("dir is "+os.path.dirname(current_name))
print("file is "+os.path.basename(current_name))
输出:
ubuntu@VM-0-2-ubuntu:~/python_file/Python$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
dir is /home/ubuntu/python_file/Python/Python
file is file_manage.py
查看文件大小和文件夹内容📂
- os.path.getsize(path):返回参数path参数中文件的字节数
- os.listdir(path):返回文件字符串的列表
import os
current_name = os.getcwd()
print(current_name+" size: "+str(os.path.getsize(current_name)))
# 获取当前路径下所有文件(夹)的大小
for file in os.listdir(current_name):
# 非文件夹
if os.path.isdir(current_name+"/"+file) == False:
print( file +" size: ",str(os.path.getsize(current_name+"/"+file)))
# 文件夹
else:
print("(dir) "+file+" size: "+str(os.path.getsize(current_name+"/"+file)))
输出:
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
/home/ubuntu/python_file size: 4096
(dir) .vscode size: 4096
test.cpp size: 30
(dir) Python size: 4096
tempCodeRunnerFile.py size: 44
文件读写
以下内容适合纯文本文件。
纯文本文件:
纯文本文件只包含基本文本字符,不包含字体、大小和颜色信息。带有.txt扩展名的文本文件,以及带有.py扩展名的python脚本文件,都是纯文本文件的例子。
二进制文件:
二进制文件是所有其他文件类型,诸如字处理文档、PDF、图像、电子表格和可执行程序
在python中,读写文件一般有三个步骤:
- 调用open()函数,返回一个File对象
- 调用File对象的read()或者write()方法
- 调用File对象的close()方法,关闭该文件
打开文件并读取内容
向open()
函数传递一个字符串路径,就可以打开一个函数。同时还可以向其第二个参数指定打开方式,类似于C语言。之后,open函数会返回一个File对象。
既然有了File对象,就可以开始从它读取内容。
使用File对象的read()
方法,可以将整个文件的内容读取为一个字符串值。
import os
current_path = os.getcwd()
file = open(current_path+"/Python/README.md","r")
file_content = file.read()
print(file_content)
输出:
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
# Python
python 学习代码
如果将文件的内容看成是单个大字符串,read方法就返回保存在该文件中的这个字符串;如果想要一行一行读取,就可以用到readlines()
方法,从该文件取得一个字符串的列表。列表中的每个字符串就是文本中的每一行。
import os
current_path = os.getcwd()
file = open(current_path+"/Python/README.md")
lines = file.readlines()
for line in lines:
print(line)
输出:
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/file_mange.py
# Python
python 学习代码
写入文件
python的写入跟C语言一样,都会覆盖原有的文件。如果想要添加内容,那么需要在open的时候指定第二个参数为”a“
(追加模式)
如果传递给open的文件名不存在,写模式和追加模式都会创建一个新的空文件。在读取或写入文件后,调用close()
方法,然后才能再次打开该文件。
import os
current_path = os.getcwd()
file = open(current_path+"/test.txt","a")
file.write("hello ")
file.write("world!\n")
file.write("\t\t\t\tby python")
file.close()
结果:
参考文献
[1]AI Sweigart.Python编程快速上手——让繁琐工作自动化.人民邮电出版社.2016.07