1.文件的打开
open('filename'[,mode[,buffering]])
#这个一定要记得关文件。close.()
filename,要以路径的形式展示,比如在"c:"中,则要这样写: r'c:filename'
如果不用路径展示,那就用'filename'.其会在执行文件所在的文件夹进行搜索。
mode的格式有几种:
‘r’, read, 读取模式;
'w’, write,写入模式;
'a', add, 添加模式;
'+', 读/写模式;
'b', 二进制模式;注意‘rb’参数可以用来读取二进制文件;
主要使用的模式是前面三种。
buffering是缓冲,参数为,0, 1,以及大于1的数字和-1。
0,表示不用缓冲,直接读写硬盘;
1,表示启用缓冲(即内存);
大于1的数字,表示缓冲的大小(单位是字节)
-1,表示默认的缓冲大小。
with open('filename') as file_object: #这种方式可以自己关文件,但是后续有关在文件运作的内容都要是在其下一级。但是赋值出来后的结果可以稳定的。
with open(r'e:first weekusername.txt','r') as f:
for i in range(2):
r_username = 'The %s username is %s'%(i,f.readline())
print(r_username)
print(r_username)
结果如下:
The 0 username is zhangyixiao
The 1 username is yingkuqi
The 1 username is yingkuqi
2.读
首先,打开文件后,如:
f = open('filename','r') #使用了名为f的对象来调用,(不用好像不能调用),然后使用'r'模式(ps,可以省略,因为是默认的)
f.read(n) # n,表示读取多少字符,如果没有n就表示把之前未读取的,全部读取出来。
f.readlines() #这个是读取出所有行,输出的结果会是一个列表,每一行作为一个元素存储在里面。
f.readline(n) # n 表示可以读取的字符数目的最大值,从0开始,没有写表示按次序来。 如果要消除尾部的换行符' ',可以在后面加上rstrip.()
如:
f.readline().rstrip()
$$一定要记住!这个read,readines,readline的功能中,如果之前有读取过的,它就不再读取了。包括使用readlines,read,readline进行读取的内容
如果想要读取特定某一行,可以利用 一个指针以及for i in range(n)的结构来实现:
password = input("Please enter your password:")
passwd = open(r'e:first weekpasswd.txt', 'r')
for l in range(2): #l作为指针指示第几行
passwd_buffer = passwd.readline().rstrip()
if l == j: #如果l与登录用户的顺序j一致,则进入之后的判断
if password == passwd_buffer:
print("yes,%s is in!"% username)
break
else:
print("Your password is wrong!")
count += 1
with open(r'e:first weekpasswd.txt', 'r+') as file_pass: for i in range(2): print(file_pass.readline()) #打开文件,赋值给内存中的一个值,然后操作,会自动关闭 with open(r'e:first weeksong.txt', 'r') as test: #print(test.read()) #读取 for i in range(10): print('%i:' % i, test.readline()) # 这个形式就是反复执行几次,readline是按照行一个个执行的,之前读取过的不会再读取 print('test print', test.readline()) test2 = test.readlines().copy() #全部读取,输出的结果是一个列表,之前读取过的不会再读取 print(test2) #打印出文件中的每一行: for line in test2: #这样,line代表列表中的每一个元素(就是一行),输出就是每一行的信息 print(line.strip()) #strip可以取出空格和换行 print('测试是否会自动关闭test', test) #会自动关闭的 #换一个形式就可以解决之前读取过的数据不能读取的问题 #采用利用readlines,再进行浅copy,就可以方便进行各种的操作 #但是会出现一个新的变量,且不会自动关闭,这样就占用了更多的内存,可以用del来释放变量 with open(r'e:first weeksong.txt', 'r') as test0: test = test0.readlines().copy() #把这个文件的东西作为列表复制出来 # print(test.read()) #读取 for i in range(10): print('%i:' % i, test[i].strip()) # 这个形式就是反复执行几次,readline是按照行一个个执行的,之前读取过的不会再读取 print('test print', test) test2 = test0.readlines().copy() # 因为之前已经读取过了,所以输出的结果空的列表 print(test2) # 打印出文件中的每一行: for line in test: # 这样,line代表列表中的每一个元素(就是一行),输出就是每一行的信息 print(line.strip()) # strip可以取出空格和换行 print('测试是否会自动关闭test', test) #不会自动关闭,这样就占用了较多的内存了。但是通过del去除变量就可以释放了 del test #但是通过del去除变量就可以释放了 #尝试使用enumerate来判定读取的是哪一行数据 with open(r'e:first weeksong.txt', 'r') as test: for index, line in enumerate(test): if index == 9: print('The 10th line is:', line) print('测试是否会自动关闭test', test) # 但是重新利用文件的赋值方式进行赋值之后,就可以关闭。不过要尽量避免这样的情况出现。
3.写
简单的格式是
with open(filename,'w') as file:
file.write("contents")
在w的打开方式下,如果目录里面没有这个文件,这个文件会被创建;如果有,就会被覆盖(所以仔细考虑用'a',还是用'w')
‘a’模式下,不会覆盖,只会添加,但是这个模式不能读取的;
如果要写入多行数据,可以采用的形式是:
with open(filename,'w') as file:
file.write("contents ")
file.write("contents ")
4.其他
一个break只能跳出当前的一个for循环或者while循环;