大学个人网站期末作业,富阳网站制作,关键词优化软件有哪些,solaris+wordpress主题读文件 打开一个文件用open()方法(open()返回一个文件对象#xff0c;它是可迭代的)#xff1a; f open(test.txt, r) r表示是文本文件#xff0c;rb是二进制文件。#xff08;这个mode参数默认值就是r#xff09; 如果文件不存在#xff0c;open()函数就会… 读文件 打开一个文件用open()方法(open()返回一个文件对象它是可迭代的) f open(test.txt, r) r表示是文本文件rb是二进制文件。这个mode参数默认值就是r 如果文件不存在open()函数就会抛出一个IOError的错误并且给出错误码和详细的信息告诉你文件不存在 fopen(test.txt, r)
Traceback (most recent call last):File stdin, line 1, in module
FileNotFoundError: [Errno 2] No such file or directory: test.txt 文件使用完毕后必须关闭因为文件对象会占用操作系统的资源并且操作系统同一时间能打开的文件数量也是有限的 f.close() 由于文件读写时都有可能产生IOError一旦出错后面的f.close()就不会调用。所以为了保证无论是否出错都能正确地关闭文件我们可以使用try ... finally来实现 try:f open(/path/to/file, r)print(f.read())
finally:if f:f.close() 但是每次都这么写实在太繁琐所以Python引入了with语句来自动帮我们调用close()方法 with open(/path/to/file, r) as f:print(f.read()) python文件对象提供了三个“读”方法 read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。
read() 每次读取整个文件它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存为了保险起见可以反复调用read(size)方法每次最多读取size个字节的内容。readlines() 之间的差异是后者一次读取整个文件象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表该列表可以由 Python 的 for ... in ... 结构进行处理。readline() 每次只读取一行通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时才应该使用 readline()。 注意这三种方法是把每行末尾的\n也读进来了它并不会默认的把\n去掉需要我们手动去掉。 In[2]: with open(test1.txt, r) as f1:list1 f1.readlines()
In[3]: list1
Out[3]: [111\n, 222\n, 333\n, 444\n, 555\n, 666\n] 去掉\n In[4]: with open(test1.txt, r) as f1:list1 f1.readlines()
for i in range(0, len(list1)):list1[i] list1[i].rstrip(\n)
In[5]: list1
Out[5]: [111, 222, 333, 444, 555, 666] 对于read()和readline()也是把\n读入了但是print的时候可以正常显示因为print里的\n被认为是换行的意思 In[7]: with open(test1.txt, r) as f1:list1 f1.read()
In[8]: list1
Out[8]: 111\n222\n333\n444\n555\n666\n
In[9]: print(list1)
111
222
333
444
555
666In[10]: with open(test1.txt, r) as f1:list1 f1.readline()
In[11]: list1
Out[11]: 111\n
In[12]: print(list1)
111 一个python面试题的例子 有两个文件每个都有很多行ip地址求出两个文件中相同的ip地址 # coding:utf-8import bisectwith open(test1.txt, r) as f1: list1 f1.readlines()for i in range(0, len(list1)): list1[i] list1[i].strip(\n)with open(test2.txt, r) as f2: list2 f2.readlines()for i in range(0, len(list2)): list2[i] list2[i].strip(\n)list2.sort()length_2 len(list2)same_data []for i in list1: pos bisect.bisect_left(list2, i) if pos len(list2) and list2[pos] i: same_data.append(i)same_data list(set(same_data))print(same_data) 要点就是1用with 2处理行末的\n 3使用二分查找提高算法效率。4使用set快速去重。 写文件 写文件和读文件是一样的唯一区别是调用open()函数时传入标识符w或者wb表示写文本文件或写二进制文件 f open(test.txt, w) # 若是wb就表示写二进制文件f.write(Hello, world!)f.close() 注意w这个模式是酱紫如果没有这个文件就创建一个如果有那么就会先把原文件的内容清空再写入新的东西。所以若不想清空原来的内容而是直接在后面追加新的内容就用a这个模式。 我们可以反复调用write()来写入文件但是务必要调用f.close()来关闭文件。当我们写文件时操作系统往往不会立刻把数据写入磁盘而是放到内存缓存起来空闲的时候再慢慢写入。只有调用close()方法时操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘剩下的丢失了。所以还是用with语句来得保险 with open(test.txt, w) as f:f.write(Hello, world!) python文件对象提供了两个“写”方法 write() 和 writelines()。
write()方法和read()、readline()方法对应是将字符串写入到文件中。writelines()方法和readlines()方法对应也是针对列表的操作。它接收一个字符串列表作为参数将他们写入到文件中换行符不会自动的加入因此需要显式的加入换行符。 f1 open(test1.txt, w)
f1.writelines([1, 2, 3])
# 此时test1.txt的内容为:123f1 open(test1.txt, w)
f1.writelines([1\n, 2\n, 3\n])
# 此时test1.txt的内容为:
# 1
# 2
# 3 关于open()的mode参数 r读 w写 a追加 r rw可读可写文件若不存在就报错(IOError) w wr可读可写文件若不存在就创建 a ar可追加可写文件若不存在就创建 对应的如果是二进制文件就都加一个b就好啦 rb wb ab rb wb ab file_obj.seek(offset,whence0) file_obj.seek(offset,whence0)方法用来在文件中移动文件指针。offset表示偏移多少。可选参数whence表示从哪里开始偏移默认是0为文件开头1为当前位置2为文件尾部。举例 f open(test1.txt, a)
print(f.read())
f.write(1)
f.seek(0, 0)# 把文件指针从末尾移到开头没有这句话下面的read()就读不到正确的东西
print(f.read())
f.close() 注意这个文件指针的改变只是作用于r,对w和a不会起作用如果是w那么write()永远都是从开头写会覆盖后面对应位置的内容是a的话write()就永远都是从最后开始追加。 字符编码 要读取非UTF-8编码的文本文件需要给open()函数传入encoding参数例如读取GBK编码的文件 f open(test.txt, r, encodinggbk)f.read()
测试 遇到有些编码不规范的文件你可能会遇到UnicodeDecodeError因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况open()函数还接收一个errors参数表示如果遇到编码错误后如何处理。最简单的方式是直接忽略 f open(test.txt, r, encodinggbk, errorsignore)