首页 > 代码库 > python基础:文件

python基础:文件

文件

打开文件

 open()函数

#获取文件句柄
f=open("D:\haha.txt")
#读取文件数据
data=http://www.mamicode.com/f.read()>
f 又叫文件句柄,它包含文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置
若想再次读文件,实际是不可以的。因为在文件中 ,维护一个类似文件指针的一个东西,这个文件指针类似于我们平时操作文件时的光标的东西,所以当第1次读文件时,文件指针已经指向最后一个位置,所以第2次再去读取的时候,是从最后一个位置开始读取的,所以读取的为空。那怎么再重新读取数据?把光标移动到开始位即可。
文件的打开模式

技术分享

 

只写

(1)w :覆盖原有内容

(2)a: 在末尾追加写入,不覆盖原有内容

只读

read()读全部

f=open("D:\haha.txt","r",encoding="utf-8")
data=http://www.mamicode.com/f.read()
print(data)
>>>
aaaa  ppppp
bbbb
cccc
dddd
eeee
ffff

 readline() 只读一行

f=open("D:\haha.txt","r",encoding="utf-8")
data=http://www.mamicode.com/f.readline()
print(data)
>>>
aaaa  ppppp

readlines()读取全部,把文件中的每一行作为一个元素形成一个列表

f=open("D:\haha.txt","r",encoding="utf-8")
data=http://www.mamicode.com/f.readlines()
print(data)
>>>
[‘aaaa  ppppp\n‘, ‘bbbb\n‘, ‘cccc\n‘, ‘dddd\n‘, ‘eeee\n‘, ‘ffff\n‘]

 应用:

1、读前几行

f=open("D:\haha.txt","r",encoding="utf-8")
for i in range(5):
    data = http://www.mamicode.com/f.readline()>>>>

aaaa ppppp

bbbb

cccc

 2、第3行内容不显示,用---***---代替

for j,k in enumerate(f.readlines()):
    if j==2:
        print("---***---")
        continue
    print(k)
>>>输出
aaaa  ppppp
bbbb
---***---
dddd
eeee
ffff

以上f.readlines()已经先把文件读到内存,然后再循环。文件小无所谓,但是文件大时,就得等很久,而且会容易把内存撑爆。 

改变该方式的方法:读一行,存一行,打印一行。

虽然达到读取文件的的目的,但是都是将内容读取到内存中,若文件小则无所谓,但是对于大文件,比如200G,则内存会被,所以不适合。读一行,存一行。打印一行,只保存一行内容到内存中。

迭代取文件内容:

for i in f:
    print(i)
>>>
aaaa  ppppp
bbbb
cccc
dddd
eeee
ffff

文件修改

文件修改思路2种,如下:

第一个 vim: 把文件内容先全都加载到内存里,修改的时候是在内存里修改的。这种情况不需要新建文件。但是文件如2g一样大,就会有问题

第二个  打开文件修改完了,加载到新文件里。

思路:边读边写,如果该行不是需要修改的,就直接写到新文件里,如果该行是需要修改的,就先修改,修改完了再写到新文件 里

# -*- coding:utf-8 -*-
f=open("yes.txt",‘r‘)
f_new=open("yes_new.txt","w")
for line in f:
    if "太阳" in line:
       line=line.replace("太阳","sun")
    f_new.write(line)
>>>>>>>>>>

我爱北京天安门
天安门上sun升
毛主席

 

python基础:文件