沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

python-文件和异常

0x01 从文件中读取数据


读取整个文件

with open('1.txt') as file_ob:
    contents = file_ob.read()
    print(contents)

with会在文件不需要访问后,将其关闭;这样的输出最后会多一个空行,因为read()到达文件末尾会返回一个空字符串,而将空字符串打印出来时就会成为一个空行,可以使用rstrip()删除

文件路径

Linux ,macOs 使用斜杠/, Windows使用反斜杠\,有绝对路径和相对路径。

逐行读取

filename  = "1.txt"

with open(filename) as file_ob:
    for line in file_ob:
        print(line)

由于每行都有换行符,而print又会加上一个换行符,所以这样打印出来的会有很多空白行,所以可以改成下面的代码

filename  = "1.txt"

with open(filename) as file_ob:
    for line in file_ob:
        print(line.rstrip())

创建一个包含文件各行内容的列表

使用with时,其作用域只有with这一小块代码块,要在with代码块外使用,则需要创建一个列表

filename = "1.txt"

with open(filename) as file_ob:
    lines = file_ob.readlines()
for line in lines:
    print(line.rstrip())

使用文件的内容

没什么好说的

filename = 'pi_30_digits.txt' 

with open(filename) as file_object:     
    lines = file_object.readlines() 
    
pi_string = '' 
for line in lines:     
    pi_string += line.strip() 
        
print(pi_string) 
print(len(pi_string))

打印文件的部分

filename = 'pi_30_digits.txt' 

with open(filename) as file_object:     
    lines = file_object.readlines() 
    
pi_string = '' 
for line in lines:     
    pi_string += line.strip() 
        
print(pi_string[:52]) 
print(len(pi_string))

0x02 写入文件


写入空文件

filename = "1.txt"

with open(filename, 'w') as file_ob:
    file_ob.write("AWWWWWW")

Python只能将字符串写入文本,如果要储存数值,要先转换为字符串

写入模式

‘w’: 写入模式 ,如果文件不存在则新建一个,存在则每次都清空再写入

‘r’: 只读模式

‘a’: 附加模式,不清空文件,再末尾追加

‘r+’: 读取和写入模式

0x03 异常


使用try-except代码块

try:
    print(2/0)
except ZeroDivisonError:
    print("U can't divide by Zero!")

如果try代码块中的代码没问题,那么将跳过except,若有问题,将执行其中代码,可以给用户一个清晰的提示。

else代码块

try:
    print(2/0)
except ZeroDivisonError:
    print("U can't divide by Zero!")
else:
    print("Yeah")

如果try没问题,则执行else的代码

处理FileNotFoundError异常

好像也没什么好讲的,就说一个spilt()方法吧,让可以根据空格把字符串拆分并存储在一个列表之中,所以可以用来计算文本的单词量

失败时一声不吭

有时候并不希望有提示,可以使用pass

filename = 'x.txt'

def ss():
    try:
        with open(filename) as file_ob:
        #...
     except:
        pass
    else:
        #...