鱼C论坛

 找回密码
 立即注册
查看: 1671|回复: 0

[技术交流] 26 文件:因为懂你,所以永恒 - 景命

[复制链接]
发表于 2017-7-24 00:03:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 景命 于 2017-7-24 00:03 编辑

知识点:

  • 文件指针:相当于一个书签,使用read()函数就相当于在读书,都到哪里书签(文件指针)就插到哪里。
  • Windows在路径名中既可以接受斜线(/)也可以接受反斜线(\),不过如果使用反斜线作为路径名的分隔符的话,要注意使用双反斜线(\\)进行转义,否者Python会将反斜线进行转义,例如(\n)看做换行符,(\t)看做一个制表符等。
  • 注意:'x','w'均是“可写入”的模式打开文件,但以'x'模式打开的时候,如果文件路径下已经存在相同名字的文件,会抛出异常,而用'w'模式的话会直接覆盖同名文件。因此,'w'模式打开文件会比较危险,容易导致此前的内容遗失,因此使用'w'模式打开文件先检查该文件名命名的文件是否已经存在显得非常重要!
  • Python拥有垃圾回收机制,会在文件对象的引用计数降至零的时候自动关闭文件,所以在Python编程里,如果忘记关闭文件并不会造成内存泄漏那么危险。但并不是说就可以不要关闭文件,如果你对文件进行了写入操作,那么你应该在完成写入之后进行关闭文件。因为Python可能会缓存你写入的数据,如果这中间断电了神马的,那些缓存的数据根本就不会写入到文件中。所以,为了安全起见,要养成使用完文件后立刻关闭的优雅习惯。


例:
>>> t = open(r"D:\如果有一天我死了.txt")
>>> for i in t:
        print(i)                #推荐采用这种方式来便利文件中的内容。

open():
        #用来打开文件。
                参数:
                        file:要打开的文件名。
                        mode:打开文件的模式默认为(rt)。
                                ‘r’:以只读的方式打开文件(默认参数)
                                ‘w’:以写入的方式打开文件,会覆盖已存在的文件。
                                ‘x’:以写入方式打开,如果文件已经存在,使用此模式打开将会引发异常。
                                ‘a’:以写入模式打开,如果文件存在,则在末尾追加写入。如果文件不存在,则创建文件。
                                ‘b’:以二进制模式打开文件。
                                ‘t’:以文本模式打开(默认)
                                ‘+’:可读写模式(可添加到其他模式中使用)
                                ‘U’:通用换行符支持。




文件对象的方法:

1)close()
        #关闭文件的方法。

2)read([size = -1])
        #从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回。
>>> f = open(r"D:\君生我未生.txt")        
>>> print(f.read())                #再次执行会打印空,因为文件指针已经指向末尾。

3)tell()
        #用来查看在当前文件中文件指针的位置。

4)seek(offset,from)
        #在文件中移动文件指针(修改文件指针),从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)0为默认,偏移offset个字节。使用seek()定位的文件指针是按字节为单位从0开始计算的,演示文件(record.txt)是以GBK进行编码的,按照规则,一个汉字需要占用两个字节,seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK编码的形式无法将其解码!

5)readline([size = -1])
        #从文件中读取一行字符(包括\n),如果size有定义那么返回size个字符。

6)write(str)
        #将字符串str写入文件中。
f = open(r"E:\test1.txt","w")
>>> f.write("有一天,")
4                                        #返回的是插入的字符的个数

7)writelines(seq)
        #向文件写入一个字符串序列seq,seq应该是一个返回字符串的可迭代对象。
a = open(r"E:\xxx.txt")
s = ["a","b","c","d"]                        #这就是返回字符串的可迭代对象。
a.writelines(s)

8)truncate([size = file.tell()])
        #截取文件到size个字节,默认是截取到文件指针的当前位置。意思就是文件中只保留0到size个字符其他的删掉。





文件扩展名问题:
长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实这种观念是错误的!
其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理的^_^

关于文件的扩展名,初学者容易走进的误区:
        误区一:文件扩展名是一个文件的必要构成部分
                一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是“打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个文件并不一定需要一个扩展名。

        误区二:文件扩展名表明了该文件是何种类型
                文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的文件,依然可能是一个视频。










评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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