新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

查看: 489|回复: 1

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

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

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

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

x
Python3  OS 文件/目录方法, o: f/ L' l& z" P( X
os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
2 m2 M7 s- D8 r6 t; {* H) M) `; F
序号
方法及描述
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()

// 获取当前目录的父目录,以字符串形式显示目录名。
8 E  J! u$ I" s) a& n8 {8 o
3 U! s9 u! s4 _# }" Q+ y+ ?* `
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读写、创建文件、文件夹等等  m$ v' `# J& O: U

# s0 N8 }4 y  b7 i6 y: L  Ipython中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
+ w- O' f0 C  C3 a& C
, v; ^/ j/ v6 J- O( G得到当前工作目录,即当前Python脚本工作的目录路径:
  1. os.getcwd()
复制代码
1 R1 n& r5 E4 ^3 ~; r

" ?- @3 M  p/ k# [# o9 z+ C返回指定目录下的所有文件和目录名:
  1. os.listdir()
复制代码
9 m* f: ?& v7 b. c8 @# ?
. X& {7 t5 f8 K0 Z2 \1 ]
函数用来删除一个文件:
  1. os.remove()
复制代码
/ F# w( @+ T2 {/ [$ C
" i  H0 [+ C1 t$ N9 V% g
删除多个目录:
  1. os.removedirs(r“c:\python”)
复制代码
+ n7 T2 s1 E) ~4 @/ a) _

  q+ T3 r: Y0 P, Y9 A* e, u2 ?& N检验给出的路径是否是一个文件:
  1. os.path.isfile()
复制代码
0 d  j* ~2 Z- s9 f) g

  _3 k/ o6 Y& K7 d# B7 v5 c检验给出的路径是否是一个目录:
  1. os.path.isdir()
复制代码

* a: h. O0 B' Q9 i* V% I1 S" T, R+ B" ~6 c. F' D6 J
判断是否是绝对路径:
  1. os.path.isabs()
复制代码
! `8 B# b/ o7 L# V, s' @

7 a/ t- a1 g8 Z4 v7 r+ I, p( z) T检验给出的路径是否真地存:
  1. os.path.exists()
复制代码
& _& l6 B, M' G7 M! K* P
( h; G2 |4 q7 J9 y
返回一个路径的目录名和文件名:
  1. os.path.split()
复制代码

/ @7 D+ N0 h7 s2 j/ j; c. peg
  1. os.path.split('/home/swaroop/byte/code/poem.txt')
复制代码
结果:
  1. ('/home/swaroop/byte/code', 'poem.txt')
复制代码
7 A& p5 X0 G- `

- @5 e, [6 m/ @: p分离扩展名:
  1. os.path.splitext()
复制代码
  R' _7 s' `) P* B$ V% t
; Q; l' K: V* G  }0 F4 [- Q# _# K6 D; q
获取路径名:
  1. os.path.dirname()
复制代码
4 c$ _0 |# @9 B3 H

* g& r! W' O- g/ U! j; l5 t1 j2 ]获取文件名:
  1. os.path.basename()
复制代码

$ @" _# n9 F  }+ e8 b& m) h1 I) ?' I, I" `3 J: T6 ^- C; T# W
运行shell命令:
  1. os.system()
复制代码
8 t. D2 ^, l2 {# I5 V/ y

7 ]3 t% U* E% r' z读取和设置环境变量:
  1. os.getenv()
复制代码
  1. os.putenv()
复制代码

9 M' f3 B7 H' J+ [0 N) x! B1 ^( L- a
给出当前平台使用的行终止符:
  1. os.linesep
复制代码
   Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'; q# i! [. y4 ?8 n: f4 V7 A% y

& h: Y4 \0 g; `. t4 S指示你正在使用的平台:
  1. os.name
复制代码
      对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix', a2 @. e: `: X

" J7 e2 L" M: f1 C0 Y4 t1 K重命名:
  1. os.rename(old, new)
复制代码
% W0 {: k. `* T1 q5 X: A% c

9 E; g# f: U- h1 ?创建多级目录:
  1. os.makedirs(r“c:\python\test”)
复制代码

# w4 }' M3 B% w  F
" [# O( V( G* l& [创建单个目录:
  1. os.mkdir(“test”)
复制代码
+ S4 b! o' y$ i" b; e4 J

0 ?6 s6 A& s, G获取文件属性:
  1. os.stat(file)
复制代码

  X) P4 s' o- E3 P$ `9 k/ y# E$ |9 i. n6 Z! Y! e3 y. Z, S
修改文件权限与时间戳:
  1. os.chmod(file)
复制代码

0 T- c! Y0 V2 e7 s+ U  b
* t6 C& p6 x/ Y终止当前进程:
  1. os.exit()
复制代码

$ Y  R  G- o+ }/ A% a6 v7 L2 [' X5 Y
获取文件大小:
  1. os.path.getsize(filename)
复制代码
5 }1 G" H' @# }% V
7 F& R" V8 @( C6 ~( a
文件操作:
" R) F7 D3 P: d, g- _' B
( M, D: k5 x0 q- u( U+ z创建空文件
  1. os.mknod("test.txt")
复制代码

1 w& y4 D5 Y0 t+ Q4 i3 j直接打开一个文件,如果文件不存在则创建文件
  1. fp = open("test.txt",w)
复制代码

9 u( Z8 S- t4 }) B6 i& o0 H8 H( l
8 g- U5 E  {7 _# I& Q关于open 模式:0 d4 S+ \2 f& n8 v8 p, f: m# |
w     以写方式打开,, D  y+ q6 v7 x$ T. y
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)1 y$ A; J2 {- P: q. a% n5 W
r+     以读写模式打开
- g; h1 \" t$ e4 O+ mw+     以读写模式打开 (参见 w )
  d' ^' N$ X; I& S5 Oa+     以读写模式打开 (参见 a )
+ d5 E- ?6 M- L+ irb     以二进制读模式打开
! `; c) m$ y& |+ _& x% Xwb     以二进制写模式打开 (参见 w )
! @: ^. d* h3 N, Y  Fab     以二进制追加模式打开 (参见 a )! e+ P/ U$ _( e3 p3 p
rb+    以二进制读写模式打开 (参见 r+ )
9 X5 {7 I# H9 S9 E9 E' \# V, Vwb+    以二进制读写模式打开 (参见 w+ )$ S( t( c+ D: }% C9 Q
ab+    以二进制读写模式打开 (参见 a+ )
* {( w5 d2 Y2 S0 J$ t# g7 H: g  B+ i6 e3 I- X* E# o
  1. fp.read([size])
复制代码
                    #size为读取的长度,以byte为单位
3 h+ L  W, A( Z- N
  1. fp.readline([size])
复制代码
                #读一行,如果定义了size,有可能返回的只是一行的一部分
4 c& B' @8 I/ \% H. u
3 Y+ T9 i3 X- a9 q2 R, L
  1. fp.readlines([size])
复制代码
               #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
: P  j, K( ]# R4 m& `5 v/ H' B( {7 p# {" L- F- u
  1. fp.write(str)
复制代码
                     #把str写到文件中,write()并不会在str后加上一个换行符
/ P5 v% R% k8 g0 p& m% _; \# N# R- M6 r6 @, j3 o
  1. fp.writelines(seq)
复制代码
           #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。- @! f2 f+ A0 @( _' u0 e' w

: G# S3 `( F" N8 q- k" Z
  1. fp.close()
复制代码
                       #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError& ]2 U/ D: y& m4 f; d8 g5 S
; n5 i6 d4 t6 O5 G0 E
  1. fp.flush()
复制代码
                                     #把缓冲区的内容写入硬盘# V* D1 J4 m2 V& }* H

3 x$ Y. E8 b* ^0 V, {
  1. fp.fileno()
复制代码
                                     #返回一个长整型的”文件标签“
" ?0 k$ s: V* B+ E8 \" g6 R
3 v7 }# K- O$ ?
  1. fp.isatty()
复制代码
                                     #文件是否是一个终端设备文件(unix系统中的)
6 a" k2 ?0 v9 Q- g: I( v) A: j
  1. fp.tell()
复制代码
                                        #返回文件操作标记的当前位置,以文件的开头为原点
. U/ ~* M6 C8 f; m" h& q2 T1 R/ C3 Q
  1. fp.next()
复制代码
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。/ F& t* B5 v! g5 w* L

2 ]% V5 w# e" y2 h# M( A
  1. fp.seek(offset[,whence])
复制代码
             #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。+ O' R8 z' Z7 r
0 A5 F2 a# T& G4 D, c
  1. fp.truncate([size])
复制代码
                      #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
5 }9 h, m- l  }
7 X( ^# q1 d( w$ P7 c. N% `目录操作:7 I( ^3 u* K" p) Z  t  c$ r9 N) k

1 B! L1 V: w6 P& G1 h, Z
  1. os.mkdir("file")
复制代码
                  创建目录
0 ?$ i3 D+ ^- P$ L+ y/ b" e' m复制文件:3 k6 g" e, g! X
  1. shutil.copyfile("oldfile","newfile")
复制代码
      oldfile和newfile都只能是文件
- K! q# n2 M7 g
  1. shutil.copy("oldfile","newfile")
复制代码
           oldfile只能是文件夹,newfile可以是文件,也可以是目标目录8 J5 ^  V* }- a/ ]% b7 O% n
复制文件夹:
  k2 o9 R2 \: y3 B5 f" s
  1. shutil.copytree("olddir","newdir")
复制代码
       olddir和newdir都只能是目录,且newdir必须不存在
. {6 q9 w7 o( n7 A重命名文件(目录)
3 a6 a/ q' @- K2 N% ^; }
  1. os.rename("oldname","newname")
复制代码
      文件或目录都是使用这条命令( T* e, C2 C3 q7 B
移动文件(目录)
8 ^& j  n9 V! G+ }- U; U* t$ N) w) z
  1. shutil.move("oldpos","newpos")
复制代码
) `0 t4 |; S/ O! R* h2 J. P* R
删除文件& }$ f3 h. \& a# x3 U5 J
  1. os.remove("file")
复制代码

" |3 j" U$ e# {# N9 z& n! c3 z删除目录" O. u" A- S, U9 P
  1. os.rmdir("dir")
复制代码
   只能删除空目录
3 i! d+ I- A* x8 h
  1. shutil.rmtree("dir")
复制代码
   空目录、有内容的目录都可以删
4 X; p. A% ?4 l$ N9 P1 y转换目录7 P5 p# _/ o) f# C7 j8 ]% E4 E
  1. os.chdir("path")
复制代码
  换路径
6 s: s0 w6 q; D5 M$ H1 k& F+ `
* j1 d6 d( Z( V3 f5 d
% i8 M; X1 m+ L/ B; Z7 U5 KPython读写文件
& y. d$ p5 g4 m3 [" O) a6 y
: b+ p4 C8 D4 g: C" G1.open" S; G% Q. Y: _# ~3 ^
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
; s$ [0 F7 |* s8 l/ i. N5 U" g6 e3 o) y* U$ Z- ]- j, Q# G
  1. file_object = open('thefile.txt')9 G+ X7 A  i9 ]# {/ M7 i& V# Z
  2. try:
    4 _+ _" q; |; a& ~! H
  3.    all_the_text = file_object.read( )- X- K8 n0 d, o  e" X( W
  4. finally:
    ; Y9 x1 i5 n5 S1 \5 q1 X2 c
  5.    file_object.close( )
复制代码
( k# V( J: s! ?4 e4 s% D
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。+ Y6 H& x& F. b3 d7 Y, K" O

: r5 q2 c2 W4 I. x$ R# }2.读文件
8 C/ D( d' S: E# M) C0 R
8 k* P' U+ s0 E; L2 L5 D读文本文件. R. k+ X! o# K3 @6 z# d% |
  1. input = open('data', 'r')
    , P  ], J: r1 @# G! ]
  2. #第二个参数默认为r
    2 O' T6 G3 X" N0 X* w: e, c* w
  3. input = open('data')
    5 w) d% B" w$ w
  4. 读二进制文件  L) [0 m" ?/ I( K  J4 k. {, F
  5. input = open('data', 'rb')
复制代码

+ x* N  L8 f0 j$ y/ K5 j  I
5 s5 t5 L, d1 _9 F! E  q读取所有内容
% z: {' W3 O4 J5 S9 ^9 l- r
  1. file_object = open('thefile.txt')
    + Q, \9 Q( S4 \9 M/ ?
  2. try:
      C; O+ }3 g, |$ H$ I9 S
  3.    all_the_text = file_object.read( )
    % Y# ~0 @. H/ x$ a. z
  4. finally:
    4 N- ~$ t- i8 D
  5.    file_object.close( )
复制代码

9 i& b+ N4 @. v/ [
& ^2 w% m/ s4 s, z' g0 P读固定字节' x) K9 ?  A' x# l5 \; A' ]- x1 m. s
  1. file_object = open('abinfile', 'rb')
    ! G/ _7 N, X) j- N
  2. try:
    & ~8 n' S2 k* o, u
  3.   while True:
    ) o7 B3 K3 F' {: E  n
  4.      chunk = file_object.read(100)+ R* o9 P8 O8 m) T/ W# J1 e
  5.     if not chunk:
    & n  B4 o: h9 G8 y7 o" v9 @
  6.       break
    # k; ]6 ~: D3 o  j- ]; l
  7.      do_something_with(chunk)1 h8 s; W8 w' |7 b# F; V
  8. finally:
    1 `, z- w2 G6 X6 w! Y9 c
  9.    file_object.close( )
复制代码

( A3 A* P; ~# F
) E6 x+ ^) V4 f, y8 r读每行7 u, [; p1 o- I- ]# u
  1. list_of_all_the_lines = file_object.readlines( )
复制代码

5 F* ^2 G) I8 j0 W3 X
1 J$ m* T2 c: z" e  f如果文件是文本文件,还可以直接遍历文件对象获取每行:
3 s; E' y9 C+ ]* X
  1. for line in file_object:
    . ?9 D7 Q- p& ]7 _, |
  2.    process line
复制代码
' E8 n3 ~- J/ A$ u3 Z
  d, i4 g9 z4 e, V$ `0 c8 X
3.写文件
9 o0 b0 T9 p9 r- j1 v. }' h+ S( T
. `) Z. T' @! w# v写文本文件4 Z- n& N' ^0 s/ X' k# m& h( {
  1. output = open('data', 'w')
复制代码
5 _1 Y! U1 z- M& z+ i
6 r+ U  m3 x; N* f9 D& T
写二进制文件
, l  v: M- T5 u; [/ D  G5 Q
  1. output = open('data', 'wb')
复制代码
* u6 l0 M7 F5 M) n; `

7 B* e" q) k: G5 N: D7 @1 x追加写文件5 D! E, E8 l7 K/ v
  1. output = open('data', 'w+')
复制代码

1 }6 a- m/ \( y2 k1 s9 t
$ d( A0 M. U* A7 H4 c写数据
( P6 m) K6 r' c
  1. file_object = open('thefile.txt', 'w')
    ) \: H+ Z/ @% b. Q
  2. file_object.write(all_the_text)
    3 }* w0 h# ]* d/ {* l6 C
  3. file_object.close( )
复制代码
+ V1 |" P( S' @4 l  S* _
0 {2 n. x; ]  y6 ^2 \( }1 b2 b+ u
写入多行
- U5 c0 }- c1 ~, [
  1. file_object.writelines(list_of_text_strings)
复制代码
2 h9 b, ~/ q: M) O/ V* g
) E8 E2 W9 m9 ]3 r* p: f6 B
注意,调用writelines写入多行在性能上会比使用write一次性写入要高。) D" |4 w7 W( `; `
/ l9 p$ r$ Y% ]
在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。1 l& q4 U$ e7 Z& S
在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:
3 `' a5 ]; k1 r) }1 A- n
  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)
复制代码

( W7 C* [# g& v6 F5 _4 |( `每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。$ u: M0 _! d# P# j! C; n# H/ t

& ?: e8 h. j( t+ j( l' k6 i. Lfile在python是一个特殊的类型,它用于在python程序中对外部的文件进行操作。在python中一切都是对象,file也不例外,file有file的方法和属性。下面先来看如何创建一个file对象:" J% p; e: P5 W. R  b

- h" S" E: d. i$ O
  1. file(name[, mode[, buffering]])
复制代码

, ]1 ~  U' E' Mfile()函数用于创建一个file对象,它有一个别名叫open(),可能更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是文件的名字。
% j3 W" I" J- K. s8 k% }" ~% N( pmode是打开的模式,可选的值为r w a U,分别代表读(默认) 写 添加支持各种换行符的模式。用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。由于历史的原因,换行符在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n',用U模式打开文件,就是支持所有的换行模式,也就说‘\r' '\n' '\r\n'都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。% t$ i' Z* J; X/ {7 S. |
buffering如果为0表示不进行缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的。
) A# h/ ]6 W+ |! j( d  l
! w/ a! W2 k7 {4 K/ n  B* [3 dfile对象有自己的属性和方法。先来看看file的属性。
. p3 q5 d: h; V3 G! X
) p; @2 ^' j6 y: C  K9 Bclosed #标记文件是否已经关闭,由close()改写- a  |* C3 Y1 P+ A9 x8 T
encoding #文件编码) d( q+ _; P+ L
mode #打开模式
, r+ }, g  q3 K6 c: Iname #文件名* _- Z' z; u3 r' J
newlines #文件中用到的换行模式,是一个tuple' k7 d8 J# |3 w1 g# W* v
softspace #boolean型,一般为0,据说用于print
4 p$ k& ?8 s$ A0 D1 B; p8 n7 u8 t
file的读写方法:3 Z+ a/ K; [# j) g+ ~1 m3 x3 B, c
9 ?) v6 i" S2 V! Q1 d" I
F.read([size]) #size为读取的长度,以byte为单位
0 ?7 _8 r' n& y1 W# P, }) K; MF.readline([size])! q2 g" N  b- o0 s
#读一行,如果定义了size,有可能返回的只是一行的一部分4 }, ]0 Z% \3 s! W6 K
F.readlines([size])1 Y6 ~4 n9 {$ x2 p6 Y0 L
#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
& u6 ]2 C# B' f8 b8 G& I  KF.write(str)
& i, j# P9 `+ B8 V, y( C) ]#把str写到文件中,write()并不会在str后加上一个换行符
1 @) P  D2 h) A- `F.writelines(seq)# n' [. N- V% n& J5 I2 t
#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。. G2 N4 `4 P/ D0 F# E+ y! j
2 |3 m# @" X; m1 C% q
file的其他方法:) {, _9 h; a; P5 N/ \

) A- o$ K. s0 d5 Z: C  S8 T2 iF.close()
- R: }7 w# S  u#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError
0 F4 K+ d' h/ m5 _8 qF.flush()& ~9 V( G( s9 }+ M
#把缓冲区的内容写入硬盘+ m: h: I# S& c
F.fileno()7 c, L7 V4 N% u- I3 D  m' \
#返回一个长整型的”文件标签“+ X) f  E) E; u- v
F.isatty()
( R. U* V1 a8 U! W9 L4 k#文件是否是一个终端设备文件(unix系统中的)7 W) ]6 g6 X8 Z6 y/ ?% `
F.tell()
: r$ H; e9 [9 ]2 r. o#返回文件操作标记的当前位置,以文件的开头为原点9 z+ t8 _6 f: H; {$ n- {8 ]6 l2 D
F.next()) x1 a7 q5 F& W
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。' q# c# T; R% R3 N1 |. t
F.seek(offset[,whence])3 S  k3 H  T9 K/ T
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。8 P3 ~5 c& {) G0 P' S0 b; z* }
F.truncate([size])
4 h- E- M3 @$ Y4 Z* O8 Z#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。$ q* n' `0 Y) M- w( V
8 f- j+ e9 C9 ^) ?+ C; C0 F, d) r# h. W
总结
9 r3 m& Q+ p3 m6 v8 g( c/ J
  j0 E5 P& e/ I# O以上所述是小编给大家介绍的python 实现创建文件夹和创建日志文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-7-2 14:17 , Processed in 0.090796 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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