python_读写文件_os模块的简单应用

目录

1. 当前工作目录

1.1 os.getcwd()函数

1.2 os.chdir()函数

2. 利用os.makedirs()创建新文件夹

3. os.path模块

3.1 利用os.path.join()创建有效路径

3.2 处理绝对路径和相对路径

3.2.1 绝对路径和相对路径的相关概念

 3.2.2 利用os.path.abspath()创建绝对路径

3.2.3 利用os.path.isabs()判断是否为绝对路径

3.2.4 利用os.path.relpath(path, start) 创建从start路径到path路径的相对路径

3.2.5 利用os.path.dirname(path)返回 参数path中最后一个反斜杠\前的所有内容

3.2.6 利用os.path.basename(path)返回参数path中最后一个反斜杠\后的所有内容

 3.2.7 利用os.path.split(path)返回参数path中最后一个反斜杠\前后的所有内容,组成一个列表返回

3.3 查找文件大小和文件夹内容

3.3.1 利用os.path.getsize(path)获取参数path中文件的字节数

 3.3.2 调用os.listdir(path)返回path下的文件名字符串的列表

 3.4 检查路径有效性

3.4.1 调用os.path.exists(path)判断参数path所指的文件或文件夹是否存在

3.4.2 调用os.path.isfile(path)判断参数path是否存在且是否是文件

 3.4.3 调用os.path.isdir(path)判断参数path1是否存在且是否是文件夹

 4. 文件读写过程

4.1 用open()函数打开文件

4.2 读取文件内容

4.2.1 调用file对象的read()和readline()方法读取文件内容

4.3 读写文件

4.3.1 以写入模式打开文件

4.3.2 以write()写入文件


几日不见,很是生疏啊啊啊啊,温故而知新!

阅读对象:知悉python的基本语法。

前言:导入os模块

import os

1. 当前工作目录

1.1 os.getcwd()函数

每一个运行在计算机上的程序,都有一个'当前目录',或者cwd。所以没有从根文件夹下的文件名或路径,都假定在当前工作目录下。可以利用os.getcwd()函数,可以获取当前工作路径的字符串。(注意:在字符串里,\(反斜杠有特殊含义,所以在字符串中输出反斜杠\需要输入\\))

import os
os.getcwd()

1.2 os.chdir()函数

也可以用os.chdir()函数改变当前工作路径。

import os
os.getcwd()  # 查看当前工作目录
os.chdir('D:\steam\bin')  # 更改当前工作目录
os.getcwd()  # 查看更改之后的当前工作目录,发现当前工作目录确实已被更改

2. 利用os.makedirs()创建新文件夹

程序可以用os.makedirs()创建新文件夹(目录).

import os
os.makedirs('e:\\pythonProject\\exercise1')

在这里,os.makedirs()不仅会创建e:\\pythonProject,也会创建exercise1文件夹,总之,os.makedirs()会创建所有必要的中间文件夹,目的是确保完整路径存在。(当然,如果e盘中有pythonProject文件夹,那么os.makedirs()就不会重新在创建该文件夹,而是进入该文件夹内继续创建exercise1文件夹)

3. os.path模块

os.path模块包含了很多与文件名和文件路径有关的有用函数。(使用该模块import os即可)

3.1 利用os.path.join()创建有效路径

os.path.join()可以将输入的各个参数用反斜杠串联起来,形成一个有效路径。

import os
os.path.join('wallpaper', 'picture', '高清')

3.2 处理绝对路径和相对路径

3.2.1 绝对路径和相对路径的相关概念

有两种方法指定一个文件路径。

第一种是‘绝对路径’,它总是从根文件夹开始的。

第二种是‘相对路径’,它是相对程序的当前目录。

相对路径中,点(.)和点点(..)文件夹,它们并不是真正的文件夹,而是可以在路径中使用的特殊名称。单个点(.)用作文件夹时,它表示当前工作目录。两个点(..)用作文件夹时,它表示当前工作目录的上一(即父文件夹)。

 3.2.2 利用os.path.abspath()创建绝对路径

os.path.abspath(path)返回参数(path)的绝对路径的字符串。这是将相对路径转化为绝对路径的简便方法。

import os
os.path.abspath('.')
os.path.abspath('..')

3.2.3 利用os.path.isabs()判断是否为绝对路径

如果输入的参数是绝对路径,那么返回True,如果是相对路径,那么返回False。

import os
os.path.isabs('c:\\visual')
os.path.isabs('.')
os.path.isabs(os.path.abspath('.'))

3.2.4 利用os.path.relpath(path, start) 创建从start路径到path路径的相对路径

import os
os.path.relpath('C:\\windows', 'c:\\')
os.path.relpath('c:\\windows', 'c:\\visual\\visual storage')

3.2.5 利用os.path.dirname(path)返回 参数path中最后一个反斜杠\前的所有内容

import os
os.path.dirname('c:\\windows')
os.path.dirname('c:\\visual\\visual storage\\作业')

  

3.2.6 利用os.path.basename(path)返回参数path中最后一个反斜杠\后的所有内容

import os
os.path.basename('c:\\windows')
os.path.basename('c:\\visual\\visual storage\\作业')

 3.2.7 利用os.path.split(path)返回参数path中最后一个反斜杠\前后的所有内容,组成一个列表返回

import os
os.path.split('c:\\visual\\visual storage\\作业')

 

另外,如果需要返回每个文件夹的字符串的列表。那么可以使用字符串的split()去处理,以os.path.sep(它会根据程序所在的计算机来输出是正斜杠(在osx和linux上)还是反斜杠(在windows系统上),当然,如果你清楚你的电脑的路径分隔符是\还是/,那么你直接用这个字符也可,这里是为了让你明白os.path.sep是什么意思即可)作为分隔符 

------------------------------------------------字符串的split()复习--------------------------------------------------------

(回顾复习,字符串的split()输入的第一个参数是分隔符,如果没有输入第一个参数,那么以各种空白字符分割(诸如空格、制表 符或换行符)间隔字符串),如果输入了,那么字符串将以该参数作为分隔符进行分隔。

还是举个小李子

'you\nare\nmy\nlove\n'.split()
'hello you are my love !'.split()

 -----------------------------------------------字符串的split()复习--------------------------------------------------------

继续前文,如何返回每个文件夹的字符串的列表?

'c:\\visual\\visual storage\\作业'.split('\\')

3.3 查找文件大小和文件夹内容

如果上面的知识你已经掌握了,那么意味着你已经可以通过处理路径来获取特定文件和特定文件信息了。这里有一些办法供你使用。

3.3.1 利用os.path.getsize(path)获取参数path中文件的字节数

这里需要注意一下,os.path.getsize()返回的是path的大小,path如果是一个文件,那么就是文件大小;如果是文件夹,那么就是文件夹大小,文件夹大小是指文件夹这个数据结构在文件系统中占用的大小,NTFS文件系统中一个簇通常是4096字节,一个文件夹占用一个簇,所以NTFS中任何一个文件夹的大小都是4096字节。

import os
os.path.getsize('c:\\visual\\visual storage')

 

上面我们知道,os.path.getsize()获取的是path中文件的大小,而不会获取该目录下所有文件的字节数。这里我们来想想怎么获取一个目录下的所有文件。

import os
totalSize = 0
for filename in os.listdir('d:\\Lenovo tools'):  # 哎呀,忘记加:冒号了
    totalSize += os.path.getsize(filename)
print(totalSize)

 3.3.2 调用os.listdir(path)返回path下的文件名字符串的列表

import os
os.listdir('D:\\Lenovo tools')

 3.4 检查路径有效性

如果你提供的路径不存在,那么许多python程序将会运行崩溃。os.path模块提供了一些检查路径的是否存在的方法。

3.4.1 调用os.path.exists(path)判断参数path所指的文件或文件夹是否存在

 如果文件存在那么返回True,文件不存在那么返回False。

import os
os.path.exists('d:\\Lenovo tools')
os.path.exists('d:\\Lenovo')

3.4.2 调用os.path.isfile(path)判断参数path是否存在且是否是文件

如果参数存在且是文件(不是文件夹),那么返回True,否则返回False 

import os
os.path.isfile('d:\\Lenovo tools\\应用在后台运行禁用启用工具.exe')  # 该文件存在
os.path.isfile('d:\\Lenovo')  # 该文件不存在
os.path.isfile('d:\\Lenovo tools\\hello')  # 该文件夹存在但是它不是文件

 3.4.3 调用os.path.isdir(path)判断参数path1是否存在且是否是文件夹

如果参数存在且是文件夹(不是文件),那么返回True,否则返回False。

import os
os.path.isdir('d:\\Lenovo tools\\应用在后台运行禁用启用工具.exe')  # 该文件存在
os.path.isdir('d:\\Lenovo')  # 该文件不存在
os.path.isdir('d:\\Lenovo tools\\hello')  # 该文件夹存在但是它不是文件

 4. 文件读写过程

在这里我们只讨论py文件和txt文件

读写文件三步骤:

1. 调用open()函数,返回file对象。

2. 调用file对象的read()和write()方法。

3. 调用file对象的close()方法,关闭该文件。

4.1 用open()函数打开文件

要用open()函数打开一个文件,需要向里面传入参数,这个参数内容是该文件的路径(绝对路径或者相对路径皆可)。

譬如:打开e盘中的hello文件夹中hello.txt文件。

hello = open('e:\\hello\\hello.txt')

open()会返回一个关于这个文件的file对象,这里我们用变量hello接收。

4.2 读取文件内容

我们有了file对象(这里给了变量hello),就可通过file对象的一些方法对我们指定的文件进行一些处理。

hello.txt文件内容:

4.2.1 调用file对象的read()和readline()方法读取文件内容

file对象的read()方法可以将指定文件的整个内容读取为一段字符串值。

readlines()会从文件中获取一个字符串的列表,列表中的每一个字符串即为文本中的每一行。

read()方法,譬如:读取hello.txt文件的所有内容(输出以str输出)

hello = open('C:\\hello\\hello.txt')
hello.read()
hello.close()  # 如果已经处理好了文件,那么不要忘了关闭文件

readlines(),譬如:读取hello.txt文件的所有内容

hello = open('e:\\hello\\hello.txt')
hello.readlines()
hello.close()  # 如果已经处理好了文件,那么不要忘了关闭文件

 每个字符串值都以一个换行字符\n 结束。除了文件的最后一行。与上文read()方法得到的单个大字符串相比,字符串的列表通常更容易处理。

4.3 读写文件

4.3.1 以写入模式打开文件

python允许你读写文件内容,但是要读写文件,那么打开文件就不应该以只读模式打开。这里需要注意,在前面中,open()中我们写入的第一个参数是文件路径,其实还有第二个参数。但是如果你没有写入第二个参数,那么python默认你输入的’r‘,(以只读模式打开);如果你想要写入文件内容,那么你应该输入第二个参数。这里有一些第二个参数的一些基本信息:

--------------------------------------------------------------------------------------------------------------------------

r : 读取文件,若文件不存在则会报错

w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件

a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾

rb,wb:分别于r,w类似,但是用于读写二进制文件

r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖

w+ : 可读,可写,文件不存在先创建,会覆盖

a+ :可读、可写,文件不存在先创建,不会覆盖,追加在末尾

注意:这里的覆盖是指每次重新打开文件进行操作时覆盖原来的,如果是在打开文件中则不会覆盖
————————————————
版权声明:本文为CSDN博主「07151012」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32648375/article/details/83342094

--------------------------------------------------------------------------------------------------------------------------

hello = open('e:\\hello\\hello.txt', 'w')

 以写入模式打开文件hello.txt

4.3.2 以write()写入文件

以w模式写入:

hello = open('e:\\hello\\hello.txt', 'w')
hello.write('\nI am a tough guy!')
hello.close()  # 如果已经处理好了文件,那么不要忘了关闭文件

以a模式写入:

hello = open('e:\\hello\\hello.txt')
hello.write('\nYou are my lover!')
hello.close()  # 如果已经处理好了文件,那么不要忘了关闭文件

 

现在再来看一下我们已经操作的文件内容:

hello = open('e:\\hello\\hello.txt', 'r')  # 当然你也可以省略'r'不写,因为python会默认只读模式
hello.read()  # w模式,a模式是不能用read()

 


版权声明:本文为m0_63001937原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。