8.2、文件操作二

f = open("yesterday", "r")

# 打印前5行
for i in range(5):
    print(f.readline())
'''
What's the trick? I wish I knew 

爱的诀窍是什么 真希望我能懂

I'm so done with thinking through all the things I could've been 

我受够了总是去想我本能完成的所有

And I know you wonder too
'''
# readlines(),每一行最后都有一个换行
print(f.readlines())
# ["What's the trick? I wish I knew \n", '爱的诀窍是什么 真希望我能懂\n']

# 打印文件
for line in f.readlines():
    print(line)

'''
What's the trick? I wish I knew 

爱的诀窍是什么 真希望我能懂

I'm so done with thinking through all the things I could've been 

我受够了总是去想我本能完成的所有

And I know you wonder too
'''
# 剔除换行
for line in f.readlines():
    print(line.strip())
'''
What's the trick? I wish I knew 
爱的诀窍是什么 真希望我能懂
I'm so done with thinking through all the things I could've been 
我受够了总是去想我本能完成的所有
And I know you wonder too
'''
# 打印前五行,low loop
for index, line in enumerate(f.readlines()):
    if index < 5:
        print(index, line.strip())
'''
0 What's the trick? I wish I knew
1 爱的诀窍是什么 真希望我能懂
2 I'm so done with thinking through all the things I could've been
3 我受够了总是去想我本能完成的所有
4 And I know you wonder too
'''
  • f.readlines()只适合读小文件,不适合读大文件
# high bigger mode,一行一行读取,不占内存
for line in f:
    print(line.strip())
'''
What's the trick? I wish I knew 
爱的诀窍是什么 真希望我能懂
I'm so done with thinking through all the things I could've been 
我受够了总是去想我本能完成的所有
And I know you wonder too
'''
# 打印前五行
count = 0
for line in f:
    if count < 5:
        print(count, line.strip())
    count += 1
'''
0 What's the trick? I wish I knew
1 爱的诀窍是什么 真希望我能懂
2 I'm so done with thinking through all the things I could've been
3 我受够了总是去想我本能完成的所有
4 And I know you wonder too
'''
  • f.seek()
  • f.tell()
# 打印文件指针位置
print(f.tell())
# 0
print(f.readline())
# What's the trick? I wish I knew
print(f.tell())
# 33
f.seek(10)
print(f.readline())
#  trick? I wish I knew 
# 打印文件名
print(f.name)
# yesterday

# 是否是tty文件
print(f.isatty())
# False

# 文件指针是否能移动
print(f.seekable())
# True

# 文件是否可写
print(f.writable())
# False

# 判断文件是否关闭
print(f.closed)
# False
  • f.flush(),将缓存中的数据刷新到硬盘
#!/usr/bin/env python
# coding: utf-8
# Author: Yerban
import sys
import time

# 例如刷新进度条
for i in range(10):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(0.5)

for i in range(10):
    sys.stdout.write("#")
    time.sleep(0.5)
  • f.truncate(),截断,如果没有值,会将文件清空;如果有值,会动文件的开头开始,到指定位置截断。

f.seek(140)
# 就算把文件指针移动,截断也还是从文件头开始。
f.truncate(100)
print(f.read())
'''
we'res the trick? I wish I knew 
爱的诀窍是什么 真希望我能懂
I'm so done with thinking
'''

  • with语句
    为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
     
    ...

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open('log1') as obj1, open('log2') as obj2:
    pass
  • 实现简单的shell sed替换功能

with open("yesterday", "r+") as f,\
        open("yesterday1", "w+") as f_new:
    for i in f:
        if "爱的诀窍" in i:
            i = i.replace("爱的诀窍", "爱的诀窍BBB")
        f_new.write(i)
    f_new.seek(0)
    print(f_new.read())

通过脚本后面传参数修改:python_name.py 爱的诀窍 爱的诀窍AAA

#!/usr/bin/env python
# coding: utf-8
# Author: Yerban
import sys

with open("yesterday", "r+") as f,\
        open("yesterday1", "w+") as f_new:
    find_str = sys.argv[1]
    replace_str = sys.argv[2]
    for i in f:
        if find_str in i:
            i = i.replace(find_str, replace_str)
        f_new.write(i)
    f_new.seek(0)
    print(f_new.read())
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容