Python学习-文件的调用-读取

 

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 week\username.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开始,没有写表示按次序来。 如果要消除尾部的换行符'\n',可以在后面加上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 week\passwd.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 week\passwd.txt', 'r+') as file_pass:
    for i in range(2):
        print(file_pass.readline())


#打开文件,赋值给内存中的一个值,然后操作,会自动关闭
with open(r'e:\first week\song.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 week\song.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 week\song.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\n")
  file.write("contents\n")


4.其他
一个break只能跳出当前的一个for循环或者while循环;

转载于:https://www.cnblogs.com/Ian-learning/p/7707135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值