文件操作

一. 文件读取

f = open("123456", mode = "r", encoding = "utf-8")

 

"123456": 文件路径

1. 绝对路径 c:/abc/123.txt       https://www.xxxxx.com/qwe.jpg

2.相对路径 ../../abc/def                     (用的更多, 因为把文件放在文件夹一起发送时, 在另一个电脑运行时, 不会出错)

mode: r w a r+ w+ a+ rb wb ab r+b w+b a+b

encoding: utf-8 gbk unicode......

 

s = f.read()                                                                            全部读取

print(s)

f. close()

 

f = open("123456", mode = "r", encoding = "utf-8")

for line in f:

    print(line.rstrip())

f,close()                                                                                读取每一行

 

f = open("123456", mode = "r", encoding = "utf-8")

lst = f.readlines()                                                                读取每一行组成的列表(这里是.readlines, 是读取全部的行, 并组成一个列表)

                                                                                             (如果是.readline就只读取文件的第一行, 读取的结果是一个字符串. 如果这时光标位置不在遗憾的第一个字符前, 从光标位置读到这一行的最后一个字符或\n)

print(lst)

f.close() 

 

 

二. 文件写入

f = open("123456", mode = 'w', encoding = "utf-8")

f.write("999999999")                                                                    把文件123456的内容全部清除, 重新写进字符串999999999

f.flush()                                                                                         把写进文件123456的所有字符全部写进去

f.close()

 

f = open("123456", mode = "a", encoding = "utf-8")

f.write("\n66666666666")                                                             把\n6666666666666添加到文件123456的最后一个字符的后面(文档结尾)

f.flush()

f.close()

 

a = open("d:/123.jpg", mode = 'rb')                                              读取一个图片时, 用r w a,Pycharm会选取一种解码方式, 如果是图片格式, Pycharm会无法解码, 导致报错, 所以用rb和wb来读取和写入字节

b = open('d:/456.jpg', mode = 'wb')                                              Pycharm会自动创建一个456的图片文件

for i  in a:

    b.write(i)                                                                                    对a文件进行遍历, 把a的每一行字节都写进b

b.flush()

a.close()

b.close()

 

 

三. 读写, 写读, 追加读模式:

 

r+ 读写模式, 先读后写

读取后写入, 都会变成在文档最末尾写入

写入时, 如果不是在最末尾写入, 会变成插入, 会替代掉后面的字节

如果先写后读, 写的内容会从第一个字符开始覆盖掉原来文件的字符串的内容, 覆盖的长度按字节来算, 如果写入3个英文字母, 会覆盖掉一个中文字符, 然后从最后一个被覆盖的字符的后面开始读. 

f = open('123456', mode = 'r+', encoding = 'utf-8')

s = f.read(3)                                                                               读取3个字符, 不是3个字节, 1个中文或1个字母或1个换行都算一个字符

print(s)

s = f.read()                                                                                会在刚才读完后的光标处继续往后读取完所有文件的字符

print(s)

f.write('4s3d5g4s35g')                                                               写入的时候光标会直接移到最后, 然后把4s3d5g4s35g添加在文件最后, 这时光标还是在文件最末尾

print(f)

f.flush()

f.close()

 

w+写读模式, 先写后读:

如果一开始就读取, 是读不到东西的

f = open('123456', mode = 'w+', encoding = 'utf-8')

f.write('wefakjchakuchahfu')                                                               写入时会覆盖掉以前的内容

f.seek(0,0)                                                                                          把光标移到初始位置

s = f.read(10)                                                                                     从初始位置读10个字符

print(s)

f.flush()

f.close()

 

a+追加读模式, 先添加后读:

如果一开始就读取, 和w+一样, 是读不到东西的

f = open('123456', mode = 'a+', encoding = 'utf-8')

f.write('abcde12345')                                                                        在最后添加字符串abcde12345

print(f.read())                                                                                     这时光标在文件的最后, 读取时, 读取不出内容

f.seek(0)                                                                                            把光标移到第一个位置

print(f.read())                                                                                     这时可以读取出文档的全部内容

f.flush()

f.close()

 

四. 光标相关操作

f.seek(3)                                                                              光标向右移动3个字节, 在utf-8的编码文件中, 是一个中文字符的长度

print(f.tell())                                                                          显示光标现在的在编码的字节文件的位置, 在f.read(1)后, 如果是读取了一个中文字符, f.tell()会输出3

f.seek(偏移量, 位置)                                                            参数只有一个时, 表示从开始位置向右移动参数个字节. 位置为0时, 是开头, 1是现在的位置, 2是末尾

f.truncate(15)                                                                       截断, 从头截断到参数位置

f.truncate()                                                                           截断, 从从截断到光标位置

 

五. os模块

import os                                                                                                         引入os模块

with open('123456', mode = 'r', encoding = 'utf-8') as f1, \                              用\换一行继续写, 方便看

open('123456_副本', mode = 'w', encoding = 'utf-8') as f2:                             用with就不需要用.close()了

    for line in f1:

        f2.write(line+"a1b2c3d4")                                                                        把f1的每一行字符串都写到f2里, 再添加一个字符串

os.remove('123456')                                                                                       删除123456文件

os.rename('123456_副本', '123456')                                                              把文件重命名为123456, 对文件进行更改

 

posted @ 2018-08-06 19:25  NachoLau  阅读(121)  评论(0编辑  收藏  举报