新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V5.9版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 507|回复: 1

[模块] 7560 - Python库 AP087【os】内置模块文件操作功能

 关闭 [复制链接]
发表于 2021-8-21 15:48:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

您需要 登录 才可以下载或查看,没有账号?注册

x
Python3  OS 文件/目录方法
" k3 I6 y" Q3 X6 l/ ]6 K. O( sos 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
+ r: ?2 `- j7 [& E. l; W
序号
方法及描述
1
os.access(path, mode)

// 检验权限模式
2
os.chdir(path)

// 改变当前工作目录
3
os.chflags(path, flags)

// 设置路径的标记为数字标记。
4
os.chmod(path, mode)

// 更改权限
5
os.chown(path, uid, gid)

// 更改文件所有者
6
os.chroot(path)

// 改变当前进程的根目录
7
os.close(fd)

// 关闭文件描述符 fd
8
os.closerange(fd_low, fd_high)

// 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9
os.dup(fd)

// 复制文件描述符 fd
10
os.dup2(fd, fd2)

// 将一个文件描述符 fd 复制到另一个 fd2
11
os.fchdir(fd)

// 通过文件描述符改变当前工作目录
12
os.fchmod(fd, mode)

// 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13
os.fchown(fd, uid, gid)

// 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14
os.fdatasync(fd)

// 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15
os.fdopen(fd[, mode[, bufsize]])

// 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16
s.fpathconf(fd, name)

// 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17
os.fstat(fd)

// 返回文件描述符fd的状态,像stat()。
18
os.fstatvfs(fd)

// 返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
19
os.fsync(fd)

// 强制将文件描述符为fd的文件写入硬盘。
20
os.ftruncate(fd, length)

// 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21
os.getcwd()

// 返回当前工作目录
22
os.getcwdb()

// 返回一个当前工作目录的Unicode对象
23
os.isatty(fd)

// 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24
os.lchflags(path, flags)

// 设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25
os.lchmod(path, mode)

// 修改连接文件权限
26
os.lchown(path, uid, gid)

// 更改文件所有者,类似 chown,但是不追踪链接。
27
os.link(src, dst)

// 创建硬链接,名为参数 dst,指向参数 src
28
os.listdir(path)

// 返回path指定的文件夹包含的文件或文件夹的名字的列表。
29
os.lseek(fd, pos, how)

// 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30
os.lstat(path)

// 像stat(),但是没有软链接
31
os.major(device)

// 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32
os.makedev(major, minor)

// 以major和minor设备号组成一个原始设备号
33
os.makedirs(path[, mode])

// 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34
os.minor(device)

// 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35
os.mkdir(path[, mode])

// 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36
os.mkfifo(path[, mode])

// 创建命名管道,mode 为数字,默认为 0666 (八进制)
37
os.mknod(filename[, mode=0600, device])

// 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
38
os.open(file, flags[, mode])

// 打开一个文件,并且设置需要的打开选项,mode参数是可选的
39
os.openpty()

// 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40
os.pathconf(path, name)

// 返回相关文件的系统配置信息。
41
os.pipe()

// 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42
os.popen(command[, mode[, bufsize]])

// 从一个 command 打开一个管道
43
os.read(fd, n)

// 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44
os.readlink(path)

// 返回软链接所指向的文件
45
os.remove(path)

// 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46
os.removedirs(path)

// 递归删除目录。
47
os.rename(src, dst)

// 重命名文件或目录,从 src 到 dst
48
os.renames(old, new)

// 递归地对目录进行更名,也可以对文件进行更名。
49
os.rmdir(path)

// 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50
os.stat(path)

// 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51
os.stat_float_times([newvalue])

// 决定stat_result是否以float对象显示时间戳
52
os.statvfs(path)

// 获取指定路径的文件系统统计信息
53
os.symlink(src, dst)

// 创建一个软链接
54
os.tcgetpgrp(fd)

// 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55
os.tcsetpgrp(fd, pg)

// 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56
os.ttyname(fd)

// 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
57
os.unlink(path)

// 删除文件路径
58
os.utime(path, times)

// 返回指定的path文件的访问和修改的时间。
59
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

// 输出在文件夹中的文件名通过在树中游走,向上或者向下。
60
os.write(fd, str)

// 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
61
os.path 模块

// 获取文件的属性信息。
62
os.pardir()

// 获取当前目录的父目录,以字符串形式显示目录名。

) F7 g- `* ~) t! F1 M; s. j/ z! k$ H8 w0 G, R. `) w' r
1
os.tempnam([dir[, prefix]])
Python3 中已删除。返回唯一的路径名用于创建临时文件。
2
os.tmpfile()
Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
3
os.tmpnam()
Python3 中已删除。为创建一个临时文件返回一个唯一的路径
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
 楼主| 发表于 2021-11-6 16:48:25 | 显示全部楼层
ps:下面看下python读写、创建文件、文件夹等等
$ ~2 k6 Z9 D, |; ^# }6 {$ x+ X
6 v7 J5 X! a6 m6 F* g) L$ Vpython中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。2 a( g5 N$ m' W2 ]- v" b

" ^! n4 s4 U/ e5 l6 O8 F' y, ]得到当前工作目录,即当前Python脚本工作的目录路径:
  1. os.getcwd()
复制代码

, J0 W* g1 {7 n8 F7 {, v4 J
7 L8 T. [5 v, i. o* H返回指定目录下的所有文件和目录名:
  1. os.listdir()
复制代码

# R7 o7 J  {; i  x- V6 \7 f
) V  j! Z7 T. a, K7 a$ l6 n函数用来删除一个文件:
  1. os.remove()
复制代码

8 S% C% `. d5 p+ f) `  T( a2 W1 y4 q4 A$ u$ [5 S- w0 F
删除多个目录:
  1. os.removedirs(r“c:\python”)
复制代码
, @. x1 i9 k7 e4 b. v

, U1 s2 |4 P) `, t检验给出的路径是否是一个文件:
  1. os.path.isfile()
复制代码

$ a2 s* s8 L4 p/ {8 Z+ C( Z4 S: |. L# s  h. r- ^4 Q9 J/ [6 f
检验给出的路径是否是一个目录:
  1. os.path.isdir()
复制代码

6 Y# [1 W( ^  m6 {, x5 b
$ x# Y! w; X. u- ]; t  S9 w" v/ ~: p1 [9 q判断是否是绝对路径:
  1. os.path.isabs()
复制代码
) v8 Z5 w0 o9 F4 i

* M. F' Q3 R1 [7 c$ k检验给出的路径是否真地存:
  1. os.path.exists()
复制代码

9 @1 Q: K' F3 b  [
+ Y+ g# {, u: j& n4 C6 [3 c返回一个路径的目录名和文件名:
  1. os.path.split()
复制代码

$ Y' M) |$ g8 ]4 R# Reg
  1. os.path.split('/home/swaroop/byte/code/poem.txt')
复制代码
结果:
  1. ('/home/swaroop/byte/code', 'poem.txt')
复制代码
. S  T( U8 U% v, c
$ R+ I! O1 `: s) s, {% L
分离扩展名:
  1. os.path.splitext()
复制代码
, Q! g' X6 {6 S3 B  H7 [9 q6 u

! k( A2 I1 k$ \& r8 y; ^获取路径名:
  1. os.path.dirname()
复制代码

7 }. q# t; ]9 C6 X: N4 Z& J, L; e1 o6 s4 v9 R2 g
获取文件名:
  1. os.path.basename()
复制代码

( o' q1 q- Z  g$ Y$ T3 I! k, O( V/ I/ F5 l6 `" @/ I
运行shell命令:
  1. os.system()
复制代码
. T! V: M0 X/ B; t5 E

0 L" }4 I7 E. h: _读取和设置环境变量:
  1. os.getenv()
复制代码
  1. os.putenv()
复制代码

3 K: w+ s( J# W. g$ S& ^
  K9 X7 ]4 m, V5 v1 L6 H7 y给出当前平台使用的行终止符:
  1. os.linesep
复制代码
   Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
3 A9 l2 p, r/ M% y3 \
: r% v1 \8 l# S2 ~指示你正在使用的平台:
  1. os.name
复制代码
      对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'1 l) H' |: }) o
$ C+ O  U0 Y% n1 b; U3 i
重命名:
  1. os.rename(old, new)
复制代码
5 F5 Q7 P* ?9 }& T- _( z( ~

! W. a/ @4 m: W2 N7 I* u) x% g创建多级目录:
  1. os.makedirs(r“c:\python\test”)
复制代码
  h/ b8 h5 i! O7 ]4 c  O9 J- [0 D* r
) ?* {, P% Y( D3 i( C- k
创建单个目录:
  1. os.mkdir(“test”)
复制代码

# J/ M; F2 D2 ~4 Z
: x& s  \3 U# a6 H0 S# i获取文件属性:
  1. os.stat(file)
复制代码

0 n9 ~' @4 F- O; H  F( `
9 r% a) x9 M/ c/ Q1 j4 @修改文件权限与时间戳:
  1. os.chmod(file)
复制代码

7 X  d$ E1 r0 H# O. V5 W$ k, u) _' w0 w- \# ~) H
终止当前进程:
  1. os.exit()
复制代码

/ |  H! K! A& \$ {4 r, x# x
/ r; Q1 x1 C( y8 j获取文件大小:
  1. os.path.getsize(filename)
复制代码
9 x; f- J: H4 A0 T) O9 w

/ H' n0 h+ K% |文件操作:. x& w% ~  f; y
8 _: [( _- t  f; H! P2 E
创建空文件
  1. os.mknod("test.txt")
复制代码
3 _! h$ L# X% ]; j7 b% ]
直接打开一个文件,如果文件不存在则创建文件
  1. fp = open("test.txt",w)
复制代码

/ n) r! k- q+ S" u  a) W% _9 O/ z: }
& b/ S, o! M3 U关于open 模式:
2 I; _+ G3 D/ w$ M2 t, O( vw     以写方式打开,6 Q, b6 x3 z: h+ D
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)! n: r: n0 h3 I, s! Q
r+     以读写模式打开$ U5 g. M6 i# B3 M) R9 w$ n" O
w+     以读写模式打开 (参见 w )9 \+ W# ^- S% _' z) a6 M0 O) @- ~" u
a+     以读写模式打开 (参见 a ). n6 L) c. ]% x" D! R
rb     以二进制读模式打开
8 k, c4 x) Z! R/ Kwb     以二进制写模式打开 (参见 w )# D8 m% z+ \+ U- A; E
ab     以二进制追加模式打开 (参见 a )
& l. a: b; e& Y! H2 r1 Urb+    以二进制读写模式打开 (参见 r+ )+ \7 i% F( w/ t9 n5 m/ y
wb+    以二进制读写模式打开 (参见 w+ )+ R! m" s- P1 B7 Q3 p1 }" V1 u- u
ab+    以二进制读写模式打开 (参见 a+ )
7 T7 E! v$ k0 u* R- L
. `8 r, n9 l2 l0 Q5 M; t/ a
  1. fp.read([size])
复制代码
                    #size为读取的长度,以byte为单位. a7 a; e: ]# Y5 y" C! S& m
  1. fp.readline([size])
复制代码
                #读一行,如果定义了size,有可能返回的只是一行的一部分- b7 Q0 Q) S( p; j5 a( Q/ S

! }4 y0 J8 t) v% m  t  b
  1. fp.readlines([size])
复制代码
               #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。  E8 {$ @: Y9 I3 b# n

$ h/ v: f6 u+ I, {/ f! ~: ]3 a
  1. fp.write(str)
复制代码
                     #把str写到文件中,write()并不会在str后加上一个换行符3 j- P' n2 U; a0 O4 v/ }" H3 o
( R' {6 G$ V) Z. |' n5 Q$ w
  1. fp.writelines(seq)
复制代码
           #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
# G5 j& D: U  {6 H, S# L( x( _( w, I
% ]3 F& n* `9 e3 d: I5 o! n3 G  p
  1. fp.close()
复制代码
                       #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError
% d6 x' n% W# Y* a# p
+ \9 ?# j3 V4 `9 z
  1. fp.flush()
复制代码
                                     #把缓冲区的内容写入硬盘
9 z8 _' M0 c, J3 V" f 5 `* N1 \9 w: v9 v; g2 z
  1. fp.fileno()
复制代码
                                     #返回一个长整型的”文件标签“$ T3 U/ E+ l) e7 G: f8 g

: E8 k" p" v9 u
  1. fp.isatty()
复制代码
                                     #文件是否是一个终端设备文件(unix系统中的)! R. Z1 P& a& z9 W0 i
' r! [/ T- M# s4 {# q3 D
  1. fp.tell()
复制代码
                                        #返回文件操作标记的当前位置,以文件的开头为原点- I) a. m- K" F2 i! f. b( f. y

6 O9 `4 {+ u( c  q; l' [8 n2 D3 G* C
  1. fp.next()
复制代码
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。# t3 h3 V6 B% Y/ ^+ v( e6 I
1 t8 P7 z, W. q, s
  1. fp.seek(offset[,whence])
复制代码
             #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。2 H. C" W5 D& I' W: s

5 J4 ?/ L! i# {8 G
  1. fp.truncate([size])
复制代码
                      #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。1 b; H% P. P! s

8 ~1 Q2 A5 \5 x8 ~1 n目录操作:% n  Z' U  s+ @1 B" w9 f
. O. {6 p  p2 {! B* B+ U$ s6 }, G
  1. os.mkdir("file")
复制代码
                  创建目录
) N4 ]2 t6 x4 x1 |2 q% E! W复制文件:
( v" ]! s# Q/ m% w$ j6 I) V; [3 ?8 c2 U
  1. shutil.copyfile("oldfile","newfile")
复制代码
      oldfile和newfile都只能是文件3 b+ ]4 p4 u4 `7 o
  1. shutil.copy("oldfile","newfile")
复制代码
           oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
+ V) n0 g8 k( a! k, h, Q1 J复制文件夹:
" U. E3 a! R3 j% }. `5 G1 F% k% ~
  1. shutil.copytree("olddir","newdir")
复制代码
       olddir和newdir都只能是目录,且newdir必须不存在
0 i0 b+ W6 n6 x5 F( n; r重命名文件(目录)
% |* K; V9 n9 ^" p5 r
  1. os.rename("oldname","newname")
复制代码
      文件或目录都是使用这条命令
4 L4 t. d5 r" R% m. N移动文件(目录)
; ~) z" R! C' C: Y+ p
  1. shutil.move("oldpos","newpos")
复制代码

1 x! k& T: F0 x# B; G5 f删除文件
* l# c/ R& B- F- ^
  1. os.remove("file")
复制代码

3 ^* y7 c. z  U7 \删除目录8 V- t. C% ?/ d& ^, }0 k/ T
  1. os.rmdir("dir")
复制代码
   只能删除空目录
/ [6 s( h9 `* k) I6 I! S7 q9 H
  1. shutil.rmtree("dir")
复制代码
   空目录、有内容的目录都可以删& V; E  _$ I, r0 Q! j
转换目录
" q9 h$ g" Y3 r: c* M
  1. os.chdir("path")
复制代码
  换路径
0 K( t* C+ k% R0 ~% a* H5 U- H( U! |# n" E: @

8 E9 a' \) Z6 m4 d( P( UPython读写文件
) e6 d9 W9 G' D5 u0 ]
3 [2 ]% W5 \$ a# V1.open& \: R3 O6 Q- ^: V0 m# r. B' w8 ^
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
+ p3 a2 s8 _) P) i9 _7 \7 o8 z6 a. ^) c6 X  O% F
  1. file_object = open('thefile.txt')
    ; t4 d/ H& v" Y2 k3 Y. O
  2. try:- {- \3 X4 \& }9 e& I/ q
  3.    all_the_text = file_object.read( )7 X/ h" G7 m& k% @
  4. finally:) S6 ?# Q5 [5 ^
  5.    file_object.close( )
复制代码
. z7 a# Q7 o, Y2 \; T* V3 [
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。; n3 o3 |, }1 |
" K: d5 N5 e1 a3 [7 J, m
2.读文件& F- h& M( ~+ y( L0 B
* `6 W0 P8 D7 Q% [/ `8 _0 j
读文本文件2 s9 K( n5 p: u. h  O9 c2 `
  1. input = open('data', 'r')2 j3 P/ t; G- k/ ?  S
  2. #第二个参数默认为r
    6 v! ?4 ?* s; z0 z9 O
  3. input = open('data')
    2 Y- w  F& s$ Z* Y$ i; p, g% H
  4. 读二进制文件; B8 }8 _" X3 F5 W
  5. input = open('data', 'rb')
复制代码
( n4 T% t/ G1 s" }  }+ e0 ?3 g
% g! t+ L9 B4 P. a1 _
读取所有内容7 N/ g5 v8 v7 ?; n: h3 C
  1. file_object = open('thefile.txt')
      t( \' z/ s: F  @; ?0 ?
  2. try:3 }% q2 @7 d" e5 C
  3.    all_the_text = file_object.read( )
    & U& Q2 `# |  e+ ?/ q8 R7 {
  4. finally:5 l/ t% j  i5 C9 `' ~- N
  5.    file_object.close( )
复制代码
  a3 b, |1 G" x+ A; ^
! \& \) P& E9 d' A* R. r
读固定字节
7 Z# O9 H8 R. p5 h: v
  1. file_object = open('abinfile', 'rb')# y1 J1 ~$ c8 R$ p
  2. try:1 a: @8 o4 _2 X! }
  3.   while True:
    $ V0 [0 Z' \7 E. L, k- e
  4.      chunk = file_object.read(100)
    + r5 v. `0 b$ ~" f
  5.     if not chunk:
    6 v2 n4 m  _3 m2 |5 J
  6.       break) u6 S- \' E$ k3 L, o
  7.      do_something_with(chunk)3 H- P& S( Y9 u& p( V" n$ q* ^
  8. finally:
    # s5 X% R# |' g
  9.    file_object.close( )
复制代码

$ _8 o' q2 p' a  t2 m
8 y1 @( t( J# l读每行
5 l( u0 Y/ U# b; @. m! s" n& `( X
  1. list_of_all_the_lines = file_object.readlines( )
复制代码

# H7 Q4 P; I1 z+ E1 r3 \, P
- z" j2 c# ~( K2 l如果文件是文本文件,还可以直接遍历文件对象获取每行:2 n5 l6 S  a" H. s, e+ @' m/ b
  1. for line in file_object:
    2 P! @% \/ A, L3 y8 ?
  2.    process line
复制代码

9 D; C& h& M/ }% h5 i5 R
; F7 s2 L$ I/ F( W3.写文件
8 y& L2 R  H' K- p. g- y. D/ d! J5 F3 v7 R1 q, o
写文本文件6 l/ {1 \' ]* w8 M9 R4 {1 V
  1. output = open('data', 'w')
复制代码
' M4 m, d: B0 F/ \1 K) w7 ~

( n' ]% H9 i- Y2 g8 d# L写二进制文件% @( g. {  b9 x  f: J3 z* m0 Z5 Z
  1. output = open('data', 'wb')
复制代码
, u3 i! h7 s% X6 y9 S% W: x: |
& f  ^+ p, V. c& X; x( x
追加写文件
7 D2 b+ j6 x# e
  1. output = open('data', 'w+')
复制代码
. V1 D7 O, F+ ]# i" A7 C: i
- y8 Q2 X: v+ s7 I6 V# b
写数据
7 s# h2 t9 ?2 C3 D0 o" L4 r' S/ ]
  1. file_object = open('thefile.txt', 'w')
    6 [% u2 W1 D7 W* K
  2. file_object.write(all_the_text)* A3 k. W. W1 W+ r$ j; N
  3. file_object.close( )
复制代码
. l( n$ j8 h8 E& W2 s0 Y

. S7 s$ ?" A" L1 X, t写入多行7 R, C8 v# K  m# }! U' M0 `
  1. file_object.writelines(list_of_text_strings)
复制代码

, u  R- T) p; y$ C/ ^- ^6 y% N. Y" I" ~, D7 x. \, A9 N/ L! \8 b- k
注意,调用writelines写入多行在性能上会比使用write一次性写入要高。- c2 m' J6 X/ @7 H. q

" j' D( S0 Y# l  v" b) k7 \在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。
$ W6 o6 t. l# t/ Z. f在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:+ V9 i+ p. X+ |4 T. ^2 W" E
  1. file = open('test.log', 'r')sizehint = 209715200  # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0:    position = file.tell()    lines = file.readlines(sizehint)
复制代码
7 Y' v- H' [0 \
每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。0 a5 t: H  {0 d7 @

+ b) K6 \) {# C  ]4 p: q  Yfile在python是一个特殊的类型,它用于在python程序中对外部的文件进行操作。在python中一切都是对象,file也不例外,file有file的方法和属性。下面先来看如何创建一个file对象:
" [9 I& y  b! s. _" t" i* U+ g7 B
% ^8 g8 ^2 x# s5 S) f% N
  1. file(name[, mode[, buffering]])
复制代码

# y8 p7 N2 V( x5 O; a0 ^2 Cfile()函数用于创建一个file对象,它有一个别名叫open(),可能更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是文件的名字。0 W, q# A& z2 t! ?1 o3 z/ t$ r5 L$ O
mode是打开的模式,可选的值为r w a U,分别代表读(默认) 写 添加支持各种换行符的模式。用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。由于历史的原因,换行符在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n',用U模式打开文件,就是支持所有的换行模式,也就说‘\r' '\n' '\r\n'都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。" y# R( e6 e5 \" v, X$ m/ H
buffering如果为0表示不进行缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的。
  }* \; {' @; D% I/ e) e0 ~' k! F5 H  K  l6 }# U: ^
file对象有自己的属性和方法。先来看看file的属性。
& r- n% \0 ]" H8 q8 Z. K
7 Q0 |/ ^0 I* `, ~6 l6 lclosed #标记文件是否已经关闭,由close()改写
. j# c( u& m: M( U* J6 E+ Lencoding #文件编码+ S5 A+ T. \6 C! i- t/ }* \% H$ `
mode #打开模式6 b: p- p2 D/ V+ R
name #文件名  d+ d2 c% t- T1 A9 `' g+ D! p+ g
newlines #文件中用到的换行模式,是一个tuple
0 H( a# r) n% w% M" `4 Wsoftspace #boolean型,一般为0,据说用于print3 O' \6 P* h+ I: ~6 p% m* Q
' k" |3 {& I9 l- p  X  e; x
file的读写方法:
; ~9 s, G3 U$ v
4 J/ M1 D0 n: }* L. OF.read([size]) #size为读取的长度,以byte为单位
6 W3 R  ^# _! ?( E: B' HF.readline([size])8 W4 C/ j0 C5 D& |. o. G- |
#读一行,如果定义了size,有可能返回的只是一行的一部分* S0 b) P9 D5 \) i
F.readlines([size])
5 x/ @8 e7 P9 n: i2 u$ x/ S, L1 k#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。+ b" Q' \, m2 ]: S, u1 D
F.write(str)
  `5 U! I; g& m1 _1 s  e#把str写到文件中,write()并不会在str后加上一个换行符
7 R# P) s; B* P, jF.writelines(seq)
( x: Y5 i4 o. T$ ^#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。5 {4 R$ Z9 h! U9 q& C& f. N

# U5 p" e8 X! B' U  ?2 Q, T  Yfile的其他方法:6 p5 q$ [# y  W5 X9 W
) H2 n0 `/ m/ [
F.close()
. \1 x" ]0 A, |% {% T* ~* r; P#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError9 M9 \+ S& t* }1 t# f5 ^; s& I
F.flush(): Y/ ]1 @; P; y0 A& a8 T, Q# L+ b+ n
#把缓冲区的内容写入硬盘- f: N/ [) n+ f
F.fileno()& T5 Q7 Y, O9 t6 a  m2 g& Y+ Z
#返回一个长整型的”文件标签“
4 L, u6 M# e. G3 z2 k" jF.isatty()" y* A/ y2 s1 u9 w
#文件是否是一个终端设备文件(unix系统中的)
: E- G3 z. `, Y# w# LF.tell()
3 a: O  A$ g4 L. H+ g) C6 M#返回文件操作标记的当前位置,以文件的开头为原点
" y7 r8 J+ i) g( s  P& Q6 PF.next()# @8 }+ O0 H& m% m2 I& b7 q3 W
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。
% u( A& K3 w; U1 `F.seek(offset[,whence])3 o5 y+ H- j. `4 |" f2 W
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。( u& n' ^( u/ q+ L6 h
F.truncate([size])
% o# o$ ~; f( [9 O2 a6 A+ c$ O#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
8 M0 {! l, F& i5 @+ T4 t# @
0 A$ F2 b! N% w# F# \8 e总结
# _' m4 L0 K3 z! V, g6 V5 \  W1 k) K
以上所述是小编给大家介绍的python 实现创建文件夹和创建日志文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

新大榭七周年,感谢由您!

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2025-10-30 22:59 , Processed in 0.087800 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表