1.文件打开
open 函数
我们使用 open() 函数打开文件。它需要两个参数,第一个参数是文件路径或文件名,第二个是文件的打开模式。模式通常是下面这样的:
"r",以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容
"w",以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写入"a",以追加模式打开,写入到文件中的任何数据将自动添加到末尾>>> fobj = open("sample.txt")>>> fobj#打开文件后我们应该总是关闭文件。我们使用方法 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-8import sysif 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-8import sysimport osdef 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 PythonI love shiyanlou