Python学习笔记(三)

"Python学习笔记"

Posted by jhljx on July 24, 2016

目录

1. Python读文件的相关函数
2. Python写文件的相关函数

1. Python读文件的相关函数

文件对象提供了三个“读”方法:file.read()file.readline()file.readlines()
每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。file.read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 file.read()生成文件内容是最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。

file.readlinefile.readlines比较相似,file.readlines也可以一次读取整个文件,和file.read()一样。file.readlines()自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for... in ... 结构进行处理。file.readline()每次只读取一行,通常比 file.readlines()慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用file.readline()函数。
通过readline输出,对于比较大的文件,这种占用内存比较小。

#coding:utf-8 
from __future__ import print_function
#abc.txt为'abc\ndef\nghi\njkl\n'
f = open('abc.txt', 'r')  
result = []  
f.seek(0)  
for line in f:  #循环文件每一行
    print(line,end='')
print(result)
f.close() 

当用end=''时,输出的时候才不会多输出空行。 逐行读取文件内容可以使用下面的代码:

#coding:utf-8 
from __future__ import print_function
#abc.txt为'abc\ndef\nghi\njkl\n'
f = open('abc.txt', 'r')
result = []
f.seek(0)
for line in open('abc.txt'):  #循环文件每一行
    text = f.readline()
    print(text, end='')
    result.append(text)
print(result)
f.close()

输出结果为:

abc
def
ghi
jkl
['abc\n', 'def\n', 'ghi\n', 'jkl\n']

这里注意在for循环的时候必须为open('abc.txt'),而不能是下面的样子:

#coding:utf-8 
from __future__ import print_function
#abc.txt为'abc\ndef\nghi\njkl\n'
f = open('abc.txt', 'r')
result = []
f.seek(0)
for line in f:  #循环文件每一行
    text = f.readline()  
    print(text, end='')  
    result.append(text)  
print(result)  
f.close()  

这样会出现错误:

ValueError: Mixing iteration and read methods would lose data

因为在for line in f的时候会隐式调用f.readline()来读取f文件中的每一行的数据并存放到变量line中。如果在循环体中再次对f文件进行读写,就会出现混乱。

我们也可以用f.readlines()f.read()函数来一次性读取f文件中的全部数据。

#coding:utf-8 
from __future__ import print_function
#abc.txt为'abc\ndef\nghi\njkl\n'
f = open('abc.txt', 'r')
result = []
f.seek(0)
text = f.readlines()  
for line in text:  #循环文件每一行
    print(line, end='')  
    result.append(line)  
print(result)  
f.close()  

输出结果为:

abc
def
ghi
jkl
['abc\n', 'def\n', 'ghi\n', 'jkl\n']

2. Python写文件的相关函数

file.write()是输出后光标在行末不会换行,下次写会接着这行写。file.writelines()也可以像file.write()写入一行数据,它还可以将python的list作为参数,写入到文件中,而file.write()只能将python字符串写入文件。

Use the write() function to write a fixed sequence of characters -- called a string -- to a file. You cannot use write() to write arrays or Python lists to a file. If you try to use write() to save a list of strings, the Python interpreter will give the error, "argument 1 must be string or read-only character buffer, not list.

The writelines() function also writes a string to a file. Unlike write(), however, writelines can write a list of strings without error. For instance, the command nameOfFile.writelines(["allen","hello world"]) writes two strings "allen" and "hello world" to the file foo.txt. Writelines() does not separate the strings, so the output will be "allenhello world".

file.writelines使用示例:

sample_list = [line+'\n' for line in sample_list]
outfile.wirtelines(sample_list)