Python3基础教程3(IO\文件)

一、模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

# 文件名: using_sys.py

import sys

print('命令行参数如下:')

for i in sys.argv:

        print(i)

        print('\n\nPython 路径为:', sys.path, '\n')

执行结果如下所示:

$ python using_sys.py 参数1 参数2
命令行参数如下:
using_sys.py
参数1
参数2


Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 

sys.argv可以获取命令行参数(argv 属性表示传递给Python脚本的命令行参数列表)

sys.argv:以列表的方式获取运行Python程序的命令行参数存放其中,其中sys.argv[0]通常就是指该Python程序脚本名称,sys.argv[1]代表第一个参数,sys.argv[2]代表第二个参数,第三、第四参数以此类推。

print(sys.argv)  # 执行代码所在的文件所在的全路径结果如下:['E:\\project\\pythonProjectTest1107\\TEST3.py']

sys.path是一个变量,也是一个列表,其中包含了许多目录路径。当你尝试导入一个模块时,Python解释器会按照sys.path中指定的顺序,依次在这些目录中搜索该模块。sys.path也就是

1.1、import语句

想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:

import module1[, module2[,... moduleN]

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。

1、一个模块只会被导入一次,不管你执行了多少次 import。这样可以防止导入模块被一遍又一遍地执行。

1.2、from … import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:

from modname import name1[, name2[, ... nameN]]

1.3、from … import * 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

1.4、深入模块

模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。

1、在一个模块(或者脚本,或者其他地方)的最前面使用 import 来导入一个模块,当然这只是一个惯例,而不是强制的。被导入的模块的名称将被放入当前操作的模块的符号表中。

2、使用 import 直接把模块内(函数,变量的)名称导入到当前操作模块。比如:

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

这种导入的方法不会把导入的模块的名称放在当前的字符表中(所以在这个例子里面,fibo 这个名称是没有定义的,所以引用的时候直接使用fib(500),而不是fibo.fib(500))。

这将把所有的名字都导入进来,但是那些由单一下划线(_)开头的名字不在此例。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。

1.4.1、__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

# Filename: using_name.py

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

运行输出如下:

$ python using_name.py
程序自身在运行
$ python
>>> import using_name
我来自另一模块
>>>

说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。

1.4.2、dir() 函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:

>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']

如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:

>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir() # 得到一个当前模块中定义的属性列表
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']

4.1.3、标准模块

Python 本身带着一些标准的模块库,在 Python 库参考文档中将会介绍到(就是后面的"库参考文档")。

有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。

这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg 这个模块就只会提供给 Windows 系统。

应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串:

>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>> sys.ps1 = 'C> '
C> print('Runoob!')
Runoob!
C> 

4.4.4、包

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。

比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。

就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

用户可以每次只导入一个包里面的特定模块,比如:

import sound.effects.echo

这将会导入子模块:sound.effects.echo。 他必须使用全名去访问:

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

还有一种导入子模块的方法是:

from sound.effects import echo

这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用:

echo.echofilter(input, output, delay=0.7, atten=4)

注意当使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。

import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。

反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。

4.4.5、从一个包中导入*

如果我们使用 from sound.effects import * 会发生什么呢?

Python 会进入文件系统,找到这个包里面所有的子模块,然后一个一个的把它们都导入进来。

但这个方法在 Windows 平台上工作的就不是非常好,因为 Windows 是一个不区分大小写的系统。

在 Windows 平台上,我们无法确定一个叫做 ECHO.py 的文件导入为模块是 echo 还是 Echo,或者是 ECHO。

一个精确包的索引:

导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。

如果 __all__ 真的没有定义,那么使用from sound.effects import *这种语法的时候,就不会导入包 sound.effects 里的任何子模块。他只是把包sound.effects和它里面定义的所有内容导入进来(可能运行__init__.py里定义的初始化代码)。

包还提供一个额外的属性__path__。这是一个目录列表,里面每一个包含的目录都有为这个包服务的__init__.py,你得在其他__init__.py被执行前定义哦。可以修改这个变量,用来影响包含在包里面的模块和子包。

这个功能并不常用,一般用来扩展包里面的模块。

1.5、相关模块

1.5.1、math模块

1.5.1.1、math.trunc() 

1、语法

math.trunc(x) 返回 x 截断整数的部分,即返回整数部分,忽略小数部分。
  • x -- 必需,数字。如果 x 不是一个数字,返回 TypeError。如果值为 0 或负数,则返回 ValueError。

不会将数字向上/向下舍入到最接近的整数,而只是删除小数。

1.5.2、string模块

1.5.2.1、常用属性

1.5.3、random

1.5.3.1、randrange(a,b) 
  • start -- 可选, 一个整数,指定开始值,默认值为 0。
  • stop -- 必需, 一个整数,指定结束值。
  • step -- 可选, 一个整数,指定步长,默认值为 1。

一般是大于等于a,小于b 

1.5.3.2、random() 

随机生成的一个实数,它在[0,1)范围内。

1.5.3.3、choice() 

方法返回一个列表,元组或字符串的随机项。

1.5.3.4、其他常用方法

1、randint函数必须是两个参数。

二、输入和输出

2.1、输出格式美化

1、Python两种输出值的方式: 表达式语句和 print() 函数。

2、第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。

3、希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。

4、希望将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。

  • str(): 函数返回一个用户易读的表达形式。
  • repr(): 产生一个解释器易读的表达形式。

#  repr() 函数可以转义字符串中的特殊字符
... hello = 'hello, runoob\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, runoob\n'
 # repr() 的参数可以是 Python 的任何对象
... repr((x, y, ('Google', 'Runoob')))
"(32.5, 40000, ('Google', 'Runoob'))"

>>> s = 'Hello, Runoob'
>>> str(s)
'Hello, Runoob'

>>> repr(s)
"'Hello, Runoob'"


>>> str(1/7)
'0.14285714285714285'


>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'x 的值为: ' + repr(x) + ',  y 的值为:' + repr(y) + '...'
>>> print(s)
x 的值为: 32.5,  y 的值为:40000...

举例:输出平方和立方

for x in range(1, 11):
    print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
    # 注意前一行 'end' 的使用 ,默认多个print打印的内容是换行显示的。
    print(repr(x*x*x).rjust(4))

结果:

 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

相关函数:

1、rjust(width, fillchar)函数在python中是一个字符串方法,用于将字符串靠右对齐并在左侧填充指定的字符。它的语法是string.rjust(width, fillchar),其中width是填充后字符串的总长度,fillchar是用于填充的字符,默认为空格。

2、ljust(width, fillchar)函数在python中是一个字符串方法,用于将字符串靠左对齐并在右侧填充指定的字符

3、center(width, fillchar)函数是Python字符串类的内置方法,用于将字符串在指定宽度的区域内居中对齐显示

4、zfill(width)函数是一个用于字符串操作的内置函数。它用于在字符串的左侧填充指定数量的零(zero),使字符串达到指定的长度。

(如果给出的width小于字符串本身自己的长度时,按照字符串自身的长度输出)

5、format() 函数是一种格式化字符串的方法,在Python中经常用于将变量插入到字符串中。

基本用法:使用大括号 { } 作为占位符,在字符串中指定位置插入变量,可以使用位置参数或关键字参数。

name = "Alice"

age = 25

print("My name is {} and I'm {} years old.".format(name, age))

# 输出:My name is Alice and I'm 25 years old.

print('{}网址: "{}!"'.format('菜鸟教程', 'www.runoob.com'))
结果:菜鸟教程网址: "www.runoob.com!"

注意:打印出来的有双引号时,打印字符串时,用单引号括起来!

通过索引指定参数位置:使用大括号 { } 中的数字来指定参数的位置,从0开始计数。

name = "Alice"

age = 25

print("My name is {0} and I'm {1} years old.".format(name, age))

# 输出:My name is Alice and I'm 25 years old.

使用关键字参数:使用大括号 {} 中的变量名来指定关键字参数的值。

name = "Alice"

age = 25

print("My name is {n} and I'm {a} years old.".format(n=name, a=age))

# 输出:My name is Alice and I'm 25 years old.

格式化数字:使用大括号 {} 中的格式化代码来格式化数字,例如 {:.2f} 表示保留2位小数。

pi = 3.1415926

print("The value of pi is {:.2f}.".format(pi))

# 输出:The value of pi is 3.14.

对齐文本:使用大括号 {} 中的格式化代码来指定文本的对齐方式,例如 {:<10} 表示左对齐,占用10个字符的宽度。

name = "Alice"

print("Name: {:<10} Age: {}".format(name, 25))

# 输出:Name: Alice      Age: 25

使用 f-string:Python 3.6及以上版本支持使用 f-string 来格式化字符串,使用类似于 f"Hello, {name}!" 的语法。

name = "Alice"

age = 25

print(f"My name is {name} and I'm {age} years old.")

# 输出:My name is Alice and I'm 25 years old.

其他用法

【1】!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用于在格式化某个值之前对其进行转化:

>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。

【2】可选项 : 格式标识符。 这就允许对值进行更好的格式化。

冒号前的位置可有可无,作为可选项;冒号后有固定的格式标识符。

下面的例子将 Pi 保留到小数点后三位:

>>> import math
>>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))
常量 PI 的值近似为 3.142。

【3】千分位分隔符

用法: {:,}

描述:每隔三个数字加一个逗号

举例:

# 单个用法
>>> print('{:,}'.format(5201314))
5,201,314
# 和其它用法结合起来使用的先后顺序
>>> print('{:*^10,}'.format(52013))  # ,需要放在最后
**52,013**

【4】指定参数使用(指定{}对应的变量)

用法:{0:}

描述:冒号后面可以跟对变量的一些格式用法,而在冒号前面则跟对应数字,如果数字是0,那么该{}对应于.format()括号里面第一个变量;以此类推,数字是1,则对应于第二个变量。

(其实我觉得之前的传参就是位置传参的感觉,而现在则通过关键字(其实就是数字)进行传参,当然传参可能用的并不贴切。)

举例:

# 第一个例子
name = 'hour'
age = 18.123
print('我叫{1:}, 我{0:.1f}岁了.重要的事情说三遍,我{0:}岁了,我的名字是{1:}'.format(age, name))
# 第二个例子
num = 425
print("对应的二进制数:{0:b}\n八进制数:{0:o}\n十六进制数:{0:x}".format(num))
# 你看现在format()括号里面不需要传入三个相同的变量num,一个变量就直接搞定。

>>> for x in range(1, 11):
...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

举例2

>>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
>>> for name, number in table.items():
...     print('{0:10} ==> {1:10d}'.format(name, number))
...
Google     ==>          1
Runoob    ==>          2
Taobao     ==>          3

【5】format传入为字典

table = {'name': 'xiaoming', 1: 100, '1': 99}                                                                                                  

print('Name: {table[name]}'.format(table=table)) #第一种:整个字典传入,使用方括号 [] 来访问键值                                                                                              
Name: xiaoming

print('Name: {name}'.format(**table))   #第二种:**kwargs关键字参数传入,在table变量前使用 ** 来访问键值                                                                                                    
Name: xiaoming

print('Name: {v}'.format(v=table['name']))  #第三种,传入字典对应key的value值                                                                                                   
Name: xiaoming

2.2、转义字符

1、【 \ 】一个单独的反斜杠表示续行符

2、【 \n 】一个反斜杠加小写字母n表示换行符

a = '写字使人快乐吗?\n非常快乐!'

print(a)

结果:

写字使人快乐吗?

非常快乐!

3、【 \t 】一个反斜杠加小写字母t表示水平制表符

a = '我和你的距离相隔了\t星辰大海'

print(a)

结果:

我和你的距离相隔了        星辰大海

4、【\"】一个反斜杠加双引号表示双引号

5、【 \\】一个反斜杠加一个反斜杠表示一个反斜杠

总结:

2.3、旧式字符串格式化

% 操作符也可以实现字符串格式化。 它将左边的参数作为类似 sprintf() 式的格式化字符串, 而将右边的代入, 然后返回格式化后的字符串。

>>> import math
>>> print('常量 PI 的值近似为:%5.3f。' % math.pi)
常量 PI 的值近似为:3.142。

注意:其中%5.3f 中的5代表总长度是5; 3是小数点后保留三位。

格式符可以包含有一个类型码,用以控制显示的类型,如下:

%s 字符串 (采用str()的显示)

%r 字符串 (采用repr()的显示)

%c 单个字符

%b 二进制整数

%d 十进制整数

%i 十进制整数

%o 八进制整数

%x 十六进制整数

%e 指数 (基底写为e)

%E 指数 (基底写为E)

%f 浮点数

%F 浮点数,与上相同

%g 指数(e)或浮点数 (根据显示长度)

%G 指数(E)或浮点数 (根据显示长度)

%% 字符"%"

2.4、读取键盘输入

Python 提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘。

str = input("请输入:")
print ("你输入的内容是: ", str)

请输入:菜鸟教程
你输入的内容是:  菜鸟教程

2.5、读和写文件

open() 将会返回一个 file 对象,基本语法格式如下:

open(filename, mode)
  • filename:包含了你要访问的文件名称的字符串值。
  • mode:决定了打开文件的模式:mode 可以是 'r' 如果文件只读, 'w' 只用于写 (如果存在同名文件则将被删除), 和 'a' 用于追加文件内容; 所写的任何数据都会被自动增加到末尾. 'r+' 同时用于读写。 mode 参数是可选的; 'r' 将是默认值。

不同模式打开文件的完全列表:

# 打开一个文件 foo.txt 
f = open("/tmp/foo.txt", "w")

f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )

# 关闭打开的文件
f.close() 

2.6、文件对象f的方法

本节中剩下的例子假设已经创建了一个称为 f 的文件对象

2.6.1、f.read()

为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。

size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 关闭打开的文件
f.close()

结果:
Python 是一个非常好的语言。
是的,的确非常好!!

2.6.2、f.readline()

f.readline() 会从文件中读取单独的一行。换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经读取到最后一行。

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 关闭打开的文件
f.close()

结果:

Python 是一个非常好的语言。

2.6.3、f.readlines()

f.readlines() 将返回该文件中包含的所有行。

如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readlines()
print(str)

# 关闭打开的文件
f.close()

结果:

['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

2.6.4、f.write()

f.write(string) 将 string 写入到文件中, 然后返回写入的字符数

# 打开一个文件
f = open("/tmp/foo.txt", "w")

num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
print(num)
# 关闭打开的文件
f.close()

结果:29

如果要写入一些不是字符串的东西, 那么将需要先进行转换:

# 打开一个文件
f = open("/tmp/foo1.txt", "w")

value = ('www.runoob.com', 14)
s = str(value)
f.write(s)

# 关闭打开的文件
f.close()

打开文件查看:

('www.runoob.com', 14)

2.6.5、f.tell()

f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。

2.6.6、f.seek()

如果要改变文件指针当前的位置, 可以使用 f.seek(offset, from_what) 函数。

from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

  • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
  • seek(x,1) : 表示从当前位置往后移动x个字符
  • seek(-x,2):表示从文件的结尾往前移动x个字符

from_what 值为默认为0,即文件开头。

>>> f = open('/tmp/foo.txt', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)     # 移动到文件的第六个字节
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 移动到文件的倒数第三字节
13
>>> f.read(1)
b'd'

2.6.7、f.close()

在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。

当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file

当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。

>>> with open('/tmp/foo.txt', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

2.7、pickle 模块

python的pickle模块实现了基本的数据序列和反序列化。

通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。

通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

基本接口:

pickle.dump(obj, file, [,protocol])

有了 pickle 这个对象, 就能对 file 以读取的形式打开:

x = pickle.load(file)

注解:从 file 中读取一个字符串,并将它重构为原来的python对象。

file: 类文件对象,有read()和readline()接口。

举例1:使用pickle模块将数据对象保存到文件

import pickle

# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()

举例2:使用pickle模块从文件中重构python对象

import pprint, pickle

# 使用pickle模块从文件中重构python对象
pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()

三、Python3 File(文件) 方法

3.1、open() 方法

Python open() 方法用于打开一个文件,并返回文件对象。

在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

open(file, mode='r')

完整的语法格式为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

3.2、file 对象

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:

四、Python3 OS 文件/目录方法

os 模块提供了非常丰富的方法用来处理文件和目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值