大小文件的两种不同操作方式

Linux文件系统

Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
python中也有文件的管理操作:
这里我在pycharm 编辑了一个文本文件:README
操作文件分三步走:

1>open:打开文件,并且返回文件操作对象
2>操作文件
 read:将文件内容读取到内存
 write:将指定内容写入文件
3>close:关闭文件

操作文件的函数/方法
在python中要操作文件需要记住的一个函数和三个方法:
#python中一切皆对象
open:打开文件,并且返回文件操作对象
read:将文件内容读取到内存
write:将指定内容写入文件
close:关闭文件
open函数负责打开文件,并且返回文件对象
read/write/close三个方法都需要通过文件对象来调用

1>read方法–读取文件

open函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读如并返回文件的所有内容
close方法负责关闭文件
如果忘记关闭文件,会造成系统消耗,而且会影响到后续对文件的执行
对kiosk有权限的任何文件都可以进行读操作:
读取方式见下方代码:

# 1.打开文件file = open('文件路径')
# file = open('/home/kiosk/PycharmProjects/python_02/while_99乘法表.py')
file = open('README')
# 2.操作文件 读/写
# read 方法:读取文件内容(一次性返回文件的所有内容)
text1 = file.read()
print text1
# text2 = file.write('lala')
# 3.关闭文件
# close方法:负责关闭文件
file.close()
# 在开发中,通常会现编写打开和关闭的代码


读取之前创建的文件,但需要指明文件的绝对路径:

文件指针:

文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件的开始位置
当执行了read方法后,文件指针会移动到读取内容的末尾

readme文件内容:hello python

# 1.打开文件
file = open('README')
# 2.操作文件 读/写
# read 方法:读取文件内容(一次性返回文件的所有内容)
text1 = file.read()
print text1
# 打印输入内容的长度
print type(text1)
print len(text1)
print '*' * 50
text1 = file.read()
print text1
print len(text1)
# 3.关闭文件
# close方法:负责关闭文件
file.close()
# 在开发中,通常会现编写打开和关闭的代码


2> 写文件:

写文件和读取文件的方式略有不同,在打开文件时,需要在文件名之后添加访问方式,对文件的写操作有两种,一种是重写覆盖源文件内容,一种是追加到源文件内容的后面
打开文件的方式:
name = open(‘文件名’,’访问方式’)
当要操作的文件不存在时,会创建一个该文件,并写入文件
‘w’表重写,会覆盖源文件内容
‘a’表append,追加拓展到源文件的后面
下面就让我们用实验来验证一下吧:
2.1>以重写的方式打开文件:

# 1.打开文件
# 'w'表重写,会覆盖源文件内容
file = open('README','w')
# 2.写入文件
file.write('lalala')
# 3.关闭文件
file.close()

测试查看源文件进行写操作之后的结果:

2.2>以追加方式打开文件
如果该文件存在,文件指针会放在文件的末尾
如果文件不存在,创建文件并写入

# 1.打开文件
# 'a'表示追加
file = open('README','a')
# 2.写入文件
file.write('我喜欢你')
# 3.关闭文件
file.close()

结果:

3 > 文件的复制

# 1.打开文件
# 源文件以只读的方式打开
file_read = open('README')
# 目标文件以写的方式打开
file_write = open('README_CP','w')

# 从源文件读取内容
text = file_read.read()
# 将读取到的内容写入目标文件中
file_write.write(text)

# 关闭文件
file_read.close()
file_write.close()

生成了一个复制出来的文件README_CP:

当然也有对大文件的操作,有时候我们并不知道大文件有多少行:
因此对大文件的操作和小文件的操作有所不同,接下来我们就来学习大文件的操作吧:

1>读取大文件

按行读取文件
read 方法默认会把文件的所有内容一次性读到内存
如果文件太大,对内存的占用会非常危险
readline方法:
readline方法可以一次性读取一行内容
方法执行后,会把文件指针移动到下一行,准备再次读取

读取大文件的正确姿势

file = open('README')
# 为什么要写成死循环:因为我们不知道要读取的文件有多少行
while True:
    text = file.readline()
    # 如果文件指针到文件的最后一行,那么就读不到内容了
    if not text:
        break
    # 每读取一行,末尾都已经有一个\n 所以读取一行输出时有一行空格
    print text
file.close()


2>

大文件写操作

写操作也有两种方式:
重写覆盖’w’,
追加’a’
2.1>重写覆盖’w’

# 1.打开文件
# 'w'表重写,会覆盖源文件内容
file = open('README','w')
# 2.写入文件
file.write(''lalala\n hello\n python\n ')
# 3.关闭文件
file.close()


2.2>追加写操作

# 1.打开文件
# 'a'表示追加
file = open('README','a')
# 2.写入文件
file.write('我喜欢你')
# 3.关闭文件
file.close()

3>大文件的复制

file_write = open('README_BIGCP','w')
file_read = open('README')
# 为什么要写成死循环:因为我们不知道要读取的文件有多少行
while True:
    text = file_read.readline()
    # 如果文件指针到文件的最后一行,那么就读不到内容了
    if not text:
        break
    # 每读取一行,末尾都已经有一个\n 所以读取一行输出时有一行空格
    print text
file_write.write(text)
file_read.close()
file_write.close()

with方式对文件进行操作

with的优势
关键字with在不需要访问文件后将其关闭,在这个程序中,
我们调用了open(),但没有调用close();你也可以调用open()
和close()来打开和关闭文件,但这样做时,系统会出现bug,导致close()
语句没有执行,文件将不会关闭,未妥善
with文件读取地关闭文件可能会导致数据丢失或受损,
如果在程序中过早地调用close(),
你会发现需要使用文件时它已经关闭,(无法访问)
这会导致更多地错误,你并非在任何情况下都能轻松的确定关闭文件地适当时机
通过使用with结构,可用python去确定,
你只管打开文件,并在需要时使用它,
python会在合适的时候自动将其关闭

1.1>with读取文件操作:

with open('file')as file_object:
    contents = file_object.read()
    print contents

1.2>with 大文件读取

filename = 'file'
with open(filename) as file_object:
    for line in file_object:
        print line


readline一行一行地读取

filename = 'file'
with open(filename) as file_object:
    lines = file_object.readline()
for line in lines:
    print line,

2 with写文件

2.1>with文件重写覆盖

filename = 'linux'
with open(filename,'w') as file_object:
    file_object.write('I love python.\n')
    file_object.write('I love linux.\n')
with open('linux')as file_object:
    contents = file_object.read()
    print contents


2.2>with文件追加

filename = 'linux'
with open(filename,'a') as file_object:
    file_object.write('I love you.\n')
    file_object.write('I love yuhan.\n')
with open('linux')as file_object:
    contents = file_object.read()
    print contents

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章