IT序号网

python--文件处理1知识解答

leader 2021年06月13日 编程语言 177 0
1.     读取文件
方法: all_the_text = open('thefile.txt').read()
但是为了安全起见还是给打开的文件对象指定一个名字,这样在完成之后可以迅速关掉,防止无用文件对象占用内存;
例子: 
file_object = open('thefile.txt',r) 
try: 
     all_the_text = file_object.read()            #read()将文件中所以字符都读到all_the_text中去变成了一个巨大的字符串, 
finally: 
     file_object.close()

不一定要加try,finally语句,但是加了更好,可以保证文件对象被关闭即使在读取中发生了严重错误;
 
 
如果要读入100个字符也可以直接:
text=file.read(100),
 
如要一行行处理还可以:
ff = file_object.readlines()
  #读出来是 list 类型,而且每行末尾都有'\n'符号;既然是一行行的,那么打印也要一行行的显示:
  for line in ff:
       print line            #此时line类型是string,而ff依然是list类型
  #这样打印出来不会乱,而如果直接 print   ff 则会一次性打印整个ff序列,而汉子在序列里面是ASCII,会导致汉子打印不出来,而且特别乱;所以要一行行的打印’
 
而最简单方法:
for line in file_object: 
     line = line.rstrip('\n') 
     print line 
此时line是string类型,但每行末尾都有'\n'符号;可以再for主体部分加一句:line = line.rstrip('\n') 在每行末尾去掉'\n'符号,而line.restrip()则默认去掉空白符;
 
2.    写入文件
最方便的一个方法:
 
open('thefile.txt','w').write(all_the_text) 

  

但是最好还是给文件对象指定一个名字,这样方便关闭文件对象
file_object = open('thefile.txt','w') 
file_object.write(all_the_text) 
file_object.close() 
 
实际上用‘w’或者'wb'打开的文件,都是空文件;哪怕是这个文件不是空文件,用这两种方式打开后,也会被清空;这种情况,就要用到‘a’或者‘ab’来打开则不会清空;
如果用'a+'这种方式来打开的话不能写的时候文件不会被清空,而且还可以读取文件呢;
注意:无论读还是写,文件打开之后游标会一直往后走,直到关闭;当然也可以使用seek()函数来控制游标
 
3.    搜索和替换文件中的文本
replace(search_text,replace_text),用于字符串的替换;
 
4.    从文件中读取指定的行
enumerate():遍历序列中的元素以及下标
>>> for i,j in enumerate(['a','b','c']): 
...     print i,j 
... 
0 a 
1 b 
2 c 

  

函数模块:
def getline(thefilepath,desired_line_number): 
     if desired_line_number < 1: 
          return ' ' 
     for current_line_number,line in enumerate(open(thefilepath,'ru')): 
          if current_line_number == desired_line_number-1: 
                    return line 
     return ''
 
库文件 linecache
当对文件进行多次读取时,linecache,特别有用,它读取并缓存指定文件里的所有文本;用clearcache()来释放被用作缓存的内存,checkcache()来确保缓存中的存储是最新的;
 
import linecache 
theline = linecache.getline(thefilepath,desired_line_number) 
#简单一句就可以得到文件指定行的文本了,方便吧; 

  

 
5.    处理文件中的每一个单词
首先看一个函数split()
Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
实例:
#!/usr/bin/python 
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";print str.split( );print str.split(' ', 1 ); 
以上实例输出结果如下: 
 
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
 
对每一个词做一些处理,最好的就是两重循环,一个用于处理行,一个用于处理单词
for line in open(thefilepath): 
     for word in line.split(): 
          dosometingwith(word) 
6. 处理zip数据
6.1 从zip文件中读取数据
任务检查一个zip文档中所有子项,并打印子项名称,以及大小;
#!/usr/bin/env python 
#encoding:utf-8 
import zipfile 
#以’r‘打开zip文件, 
z = zipfile.ZipFile("text.txt.zip","r") 
#从zip文件列表中读取子项名并读取出来计算其字节数 
for filename in z.namelist(): 
        print 'File:',filename 
 
        byte = z.read(filename) 
 
        print 'has',len(byte),'byte'
 

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

python2.7升python3.2知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。