Python_文件操作

一、文件操作流程

1. 打开文件,得到文件句柄并赋值给一个变量 # f = open('文件测试', 'r', encoding='utf8')
2. 通过句柄对文件进行操作 # f.write('hello world')
3. 关闭文件

次博测试使用文件如下:

对酒当歌,人生几何!
譬如朝露,去日苦多。
慨当以慷,忧思难忘。
何以解忧?唯有杜康。
青青子衿,悠悠我心。
但为君故,沉吟至今。
呦呦鹿鸣,食野之苹。
我有嘉宾,鼓瑟吹笙。
明明如月,何时可掇?
忧从中来,不可断绝。
越陌度阡,枉用相存。
契阔谈,心念旧恩。
月明星稀,乌鹊南飞。
绕树三匝,何枝可依?
山不厌高,海不厌深。
周公吐哺,天下归心。

 

二、操作方法

1. 打开文件的模式

  • r ,只读模式(默认模式);
  • w ,只写模式。【只能写,不能读,如果文件不存在就创建,如果存在就删除了再写】
  • a ,追加模式。【可读,文件不存在就创建文件,如果存在就追加内容】
  • r+ ,可读写文件。【可读;可写;可追加】
  • w+ ,写读模式首先是写,所以会默认先清空所有内容并写入,再读光标后的内容,但是此时光标已经挪到了最后边
  • a+ ,追加+读模式首先是追加,光标先挪到最后再追加,追加之后光标还是在最后

2. 其他操作

write直接覆盖,相当于linux的 '>'。

f = open('文件测试', 'w', encoding='utf8')                        # 此时已经清空,并不是写的时候才进行的清空
data = f.write('hello world')                            
f.close()

直接创建文件。

f = open('文件测试_2', 'w', encoding='utf8')
f.write('test''\n')                                              # 创建一个新的文件,并写入test
f.write('wangjie')                                               # 直接紧挨着在后边进行添加,如果需要换行,需要手动写
f.close()

追加。

f = open('文件测试', 'a', encoding='utf8')
f.write("\n" "wangjie")                                          # a(append)是追加模式,直接追加到光标后边,如果需要换行,自行增加换行符
f.close()

 readline,打印一行,如果两个readline则是两行,应为打印完第一行之后,光标在第一行最后。

f = open('文件测试', 'r', encoding='utf8')
print(f.readline())                                               # 打印一行,光标已经在最后了
print(f.readline())                                               # 打印下一行
f.close()

readlines,打印所有行,但是打印出来的是一个列表。

f = open('文件测试', 'r', encoding='utf8')
print(f.readlines())

for i in f.readlines():
    print(i.strip())

 这是for循环内部将f对象做成了一个迭代器,用一个取一个,对于文本就是用一行取一行,打开文件最优的方式!!!

f = open('文件测试', 'r', encoding='utf8')
for i in f:
    print(i.strip())

 tell是查看光标位置的,一个英文一个字符,一个中文3个字符。

f = open('文件测试', 'r', encoding='utf8')
print(f.tell())
print(f.read(2))
print(f.tell())

seek调整光标位置。

f = open('文件测试', 'r', encoding='utf8')
f.read(4)
print(f.tell())
f.seek(0)
print(f.tell())

 flush刷新、清空缓存,将缓存中的东西立即放置到文件中(保存到磁盘中)。

f = open('文件测试', 'w', encoding='utf8')
f.write('123')
f.flush()
f.write('456')

# flush测试
import sys,time
for i in range(30):
    print('*', end='', flush=True)
    time.sleep(0.2)

truncate,截断/删除,如果不定义位置,从头开始。

f = open('文件测试', 'a', encoding='utf8')                                # 句柄如果是"w",会默认全部先删除
f.truncate(10)

 r+ 读写测试

f = open('文件测试', 'r+', encoding='utf8')
print(f.readline())
f.write('王师傅')                                                         # 打印出第一句,并在最后追加

w+ 写读测试

f = open('文件测试', 'w+', encoding='utf8')
f.write('王师傅')                                                          # 写读模式首先是写,所以会默认先清空所有内容并写入,再读光标后的内容,但是此时光标已经挪到了最后边
print(f.readline())
f.close()

a+ 追加+读测试

f = open('文件测试', 'a+', encoding='utf8')
f.write('王师傅')                                                          # 追加+读模式首先是追加,光标先挪到最后再追加,追加之后光标还是在最后
print(f.read())
f.close()

 

 三、with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

with open('文件测试', 'r', encoding='utf8') as f:
    print(f.read())
    pass

 Python3版本可以对多个文件执行with语句。

with open('文件测试', 'r', encoding='utf8') as f_read, open('文件测试_2', 'w', encoding='utf8') as f_write:
  pass

 

 四、文件操作小练习

1. 打印第六行,并在后边加上“like it”

方法一:

f = open('文件测试', 'r', encoding='utf8')
date = f.readlines()
f.close()
number = 0

for i in date:
    number = number + 1
    if number == 6:
        i = ''.join([i.strip(), 'like it'])               # 拼接用join,以'...'的方法拼接
    print(i.strip())
View Code

方法二 :

f = open('文件测试', 'r', encoding='utf8')
date = f.readlines()
f.close()
date[5] = '但为君故,沉吟至今。 lite it'
for i in date:
    print(i.strip())
View Code

2. 修改第六行,后边加上“like it”

f = open('文件测试', 'r', encoding='utf8')
date = f.readlines()
date[5] = date[5].replace('\n','') + 'like it\n'
f.close()
f = open('文件测试', 'w', encoding='utf8')
for i in date:
    f.write(i)
    print(i.strip())
f.close()
View Code

3.  修改第六行,后边加上“like it”,并输出到另一个文件

正常方法

f_read = open('文件测试', 'r', encoding='utf8')
f_write = open('文件测试_2', 'w', encoding='utf8')

number = 0
for line in f_read:
    number = number + 1
    if number == 6:
        line = ''.join([line.strip(),'hello world \n'])
    f_write.write(line)
f_read.close()
f_write.close()
View Code

with方法:

with open('文件测试', 'r', encoding='utf8') as f_read, open('文件测试_2', 'w', encoding='utf8') as f_write:
    number = 0
    for line in f_read:
        number = number + 1
        if number == 6:
            line = ''.join([line.strip(), 'hello world \n'])
        f_write.write(line)
    pass
View Code

 

posted @ 2017-11-17 18:03  隔壁王师傅  阅读(231)  评论(0编辑  收藏  举报