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()
接受两个实参:要存储的数据以及可用于存储数据的文件对象。
将代码划分为一系列完成具体工作的函数,这样的过程被称为重构。重构让代码更清晰、更易于理解、更容易扩展。
删除了注释后,可以转而使用一个文档字符串(''' ''')来指出程序是做什么的
https://www.mubucm.com/doc/4eRTQfCxmNc