文件处理

 

1.文件打开

open 函数

我们使用 open() 函数打开文件。它需要两个参数,第一个参数是文件路径或文件名,第二个是文件的打开模式。模式通常是下面这样的:

"r",以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容
"w",以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写入
"a",以追加模式打开,写入到文件中的任何数据将自动添加到末尾

>>> fobj = open("sample.txt")
>>> fobj
<open file 'sample.txt', mode 'r' at 0xb7f2d968>

#打开文件后我们应该总是关闭文件。我们使用方法 close() 完成这个操作。
fobj.close()

始终确保你显式关闭每个打开的文件,一旦它的工作完成你没有任何理由保持打开文件。因为程序能打开的文件数量是有上限的。如果你超出了这个限制,没有任何可靠的方法恢复,因此程序可能会崩溃。每个打开的文件关联的数据结构(文件描述符/句柄/文件锁...)都要消耗一些主存资源。因此如果许多打开的文件没用了你可以结束大量的内存浪费,并且文件打开时始终存在数据损坏或丢失的可能性。

 

2.文件读取

使用 read() 方法一次性读取整个文件。

>>> fibo=open("sample.txt")
>>> fibo.read()
'I love Python\nI love shiyanlou\n'
>>> fibo.read()
''
#如果你再一次调用 read(),它会返回空字符串因为它已经读取完整个文件

read(size) 有一个可选的参数 size,用于指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。

 

readline() 能帮助你每次读取文件的一行。  readlines() 方法读取所有行到一个列表中。

>>> fibo=open("sample.txt")
>>> fibo.readline()
'I love Python\n'
>>> fibo.readline()
'I love shiyanlou\n'
>>> fibo.readline()
''
>>> fibo.close()
>>> fibo=open("sample.txt")
['I love Python\n', 'I love shiyanlou\n']
>>> 

 3.文件写入

(1).拷贝文件

#! /usr/bin/python
#coding=utf-8
import sys
if len(sys.argv) != 3 :
    print ("入参个数有误, 例如 ./copyfile file1name file2name")
    sys.exit(1)
else :
    f1 = open (sys.argv[1])
    s = f1.read()
    f1.close()
    f2 = open (sys.argv[2],'w')
    f2.write(s)
    f2.close()
    print ("复制成功!")

(2). 文本文件相关信息统计

#! /usr/bin/python
#coding=utf-8
import sys
import os

def parse_file(path):
    """
    分析文件,给出空格 制表符 行的相关信息
    part: 要分析的文件路径
    return 包含空格 制表符 行的 元祖
    """
    fd = open(path)
    ftlines = fd.readlines()
    fd.close()
    i = 0
    tabs = 0
    spance = 0
    for i,lines in enumerate(ftlines):
        tabs += lines.count('\t')
        spance += lines.count(' ')
    return (spance,tabs,i+1)


def main (path) :
    '''
    分析分析结果
    path 文件路径
    如果存在文件,返回true,不存在返回flase
    '''
    if os.path.exists (path) :
        spance,tabs,lines = parse_file(path)
        print ("空格{},制表符{},行{}".format(spance,tabs,lines))
        return True
    else :
        print ("不存在文件:{}".format(path))
        return False
        
if __name__ == '__main__':
    if len(sys.argv) == 2 :
        main (sys.argv[1])
    else :
        print ("入参个数不对")
        sys.exit(-1)    
    sys.exit(0)    
        
   
   

4.with 语句打开文件

在实际情况中,我们应该尝试使用 with 语句处理文件对象,它会在文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写:

>>> with open('sample.txt') as fobj:
...     for line in fobj:
...         print(line, end = '')
... 
I love Python
I love shiyanlou

 

posted @ 2018-08-21 15:04  myself_think  阅读(111)  评论(0)    收藏  举报