python的一些普通文件操作

作为我的代码库(虽说用猿如意好像也行)

#python基础代码系列

读文件

代码

def new_func():
    filename = 'pi_million_digits.txt'
    return filename

filename = new_func()

with open(filename) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

print(pi_string[:52] + '...')# 前52个非空字符,这里可以自己改参数
print(len(pi_string)) #统计文件中的字符总数

#这个其实就是上面的拓展
filename = 'pi_million_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

birthday = input('Enter your birthday, in the form mmddyy: ') #格式:120372
if birthday in pi_string:
    print('Your birthday appears in the first million digits of pi!')
else:
    print('Your birthday does not appear in the first million digits of pi.')

底层知识

.strip()

用法

写文件

代码

#带换行符
filename = 'programming.txt'

with open(filename, 'w') as file_object:
    file_object.write('I love programming.\n')
    file_object.write('I love creating new games.\n')

filename = 'programming.txt'

with open(filename, 'a') as file_object:  #改了这里
    file_object.write('I also love finding meaning in large datasets.\n') 
    file_object.write('I love creating apps that can run in a browser.\n')

处理异常

如果try代码块中的代码运行起来没有问题,Python将跳过except代码块;如果try代码块中的代码导致了错误,Python将查找这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。依赖于try代码块成功执行的代码都应放到else代码块中。

try:
    print(5/0)
except ZeroDivisionError:
    print('You can't divide by zero!')

ZeroDivisionError异常

print('Give me two numbers, and I'll divide them.')
print('Enter 'q' to quit.')

while True:
    first_number = input('\nFirst number: ')
    if first_number == 'q':
        break
    second_number = input('Second number: ')
    try: ❶
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError: ❷
        print('You can't divide by 0!')
    else: ❸
        print(answer)

FileNotFoundError异常

def count_words(filename):
    '''计算一个文件大致包含多少个单词''' ❶
    try:  #必须将try语句放在包含open()的代码行之前:
        with open(filename) as f_obj:
            contents = f_obj.read()
    except FileNotFoundError:
        msg = 'Sorry, the file ' + filename + ' does not exist.'
        print(msg)
    else:
        # 计算文件大致包含多少个单词
        words = contents.split()
        num_words = len(words)
        print('The file ' + filename + ' has about ' + str(num_words) +
            ' words.')

filename = 'alice.txt'
count_words(filename)

#将要分析的文件的名称存储在一个列表中
def count_words(filename):
    --snip--  #省略了上面的def 语句的代码片段

filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt'] # 可修改参数
for filename in filenames:
    count_words(filename)

底层知识

try-except-else代码块的工作原理大致如下:Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。

方法split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。

Python有一个pass语句,可在代码块中使用它来让Python什么都不要做。pass语句还充当了占位符,它提醒你在程序的某个地方什么都没有做,并且以后也许要在这里做些什么。

存储文件

不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。

一种简单的方式是使用模块json来存储数据。

JSON数据格式

并非Python专用的,这让你能够将以JSON格式存储的数据与使用其他编程语言的人分享。这是一种轻便格式,很有用,也易于学习。

import json

numbers = [2, 3, 5, 7, 11, 13]

filename = 'numbers.json' 
with open(filename, 'w') as f_obj: 
    json.dump(numbers, f_obj) 

import json

filename = 'numbers.json'  #读取的是前面写入的文件
with open(filename) as f_obj:  #以读取方式打开这个文件
    numbers = json.load(f_obj)  #使用函数json.load()加载存储在numbers.json中的信息,并将其存储到变量numbers中

print(numbers)

import json

# 如果以前存储了用户名,就加载它
#  否则,就提示用户输入用户名并存储它
filename = 'username.json'
try:
    with open(filename) as f_obj: 
        username = json.load(f_obj) 
except FileNotFoundError: 
    username = input('What is your name? ') 
    with open(filename, 'w') as f_obj: 
        json.dump(username, f_obj)
        print('We'll remember you when you come back, ' + username + '!')
else:
    print('Welcome back, ' + username + '!')

重构后的代码

#将没有存储用户名时提示用户输入的代码放在一个独立的函数中:
import json

def get_stored_username():
    '''如果存储了用户名,就获取它''' 
    filename = 'username.json'
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None 
    else:
        return username

def get_new_username():
    '''提示用户输入用户名'''
    username = input('What is your name? ')
    filename = 'username.json'
    with open(filename, 'w') as f_obj:
        json.dump(username, f_obj)
    return username

def greet_user():
    '''问候用户,并指出其名字'''
    username = get_stored_username()
    if username:
        print('Welcome back, ' + username + '!')
    else:
        username = get_new_username()
        print('We'll remember you when you come back, ' + username + '!')

greet_user()

底层知识

函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。

将代码划分为一系列完成具体工作的函数,这样的过程被称为重构。重构让代码更清晰、更易于理解、更容易扩展。

删除了注释后,可以转而使用一个文档字符串(''' ''')来指出程序是做什么的

python资料 文章被收录于专栏

https://www.mubucm.com/doc/4eRTQfCxmNc

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务