大家好,我是星源,一个正在自学Python的19岁编程小白 🤓。这是我的学习笔记系列,我会把每天学到的知识点整理出来,分享给同样在路上的小伙伴,希望能和大家一起进步 🚀。
📌 今日学习内容
👉 "今天我们来学习文件操作与文件路径管理的基础知识"
✨ 知识点讲解
1️⃣文件与文件路径基础
文件存储在文件夹中,路径描述了文件在计算机中的位置。文件路径可以是绝对路径(从根文件夹开始)或相对路径(相对于当前工作目录)。例如,在Windows中,C:\Users\asweigart\Documents是一个绝对路径。
2️⃣Windows路径与OS X/Linux路径
在Windows中,路径使用反斜杠\作为分隔符,而在OS X和Linux中,使用正斜杠/。Python的os.path.join()函数可以自动处理不同操作系统的路径分隔符:
importosprint(os.path.join('usr', 'bin', 'spam')) # 输出: usr\bin\spam (Windows) 或 usr/bin/spam (OS X/Linux)3️⃣ 当前工作目录
每个运行中的程序都有一个当前工作目录。可以使用os.getcwd()获取当前工作目录,使用os.chdir()改变工作目录:
importosprint(os.getcwd()) # 获取当前工作目录os.chdir('/path/to/new/directory') # 更改工作目录4️⃣ 绝对路径与相对路径
绝对路径总是从根文件夹开始,而相对路径基于当前工作目录。可以通过os.path.abspath()将相对路径转换为绝对路径:
importosprint(os.path.abspath('.')) # 获取当前目录的绝对路径5️⃣ 创建新文件夹
使用os.makedirs()可以创建新的文件夹及其所有必要的中间文件夹:
importosos.makedirs('C:\\delicious\\walnut\\waffles') # 创建嵌套文件夹6️⃣ os.path模块
os.path模块提供了许多处理文件路径的函数:
os.path.basename(path):返回路径中的基本名称(文件名)
os.path.dirname(path):返回路径中的目录名称
os.path.split(path):将路径分割为目录名称和基本名称的元组
os.path.getsize(path):返回文件的字节数
os.path.exists(path):检查路径是否存在
os.path.isfile(path):检查路径是否为文件
os.path.isdir(path):检查路径是否为文件夹
7️⃣读取文件内容
可以使用open()函数以读取模式打开文件,然后用read()或readlines()方法读取内容:
hello_file=open('hello.txt')content=hello_file.read()print(content)lines=hello_file.readlines()print(lines)8️⃣写入文件
以写入或追加模式打开文件,可以使用write()方法写入内容:
bacon_file=open('bacon.txt', 'w') # 写模式,会清空文件bacon_file.write('Hello world!\n')bacon_file.close()bacon_file=open('bacon.txt', 'a') # 追加模式bacon_file.write('Bacon is not a vegetable.')bacon_file.close()9️⃣用shelve模块保存变量
shelve模块可以将变量保存到二进制文件中,以便后续使用:
importshelveshelf_file=shelve.open('mydata')shelf_file['cats'] = ['Zophie', 'Pooka', 'Simon']shelf_file.close()# 读取保存的变量shelf_file=shelve.open('mydata')print(shelf_file['cats'])shelf_file.close()1️⃣0️⃣用pprint模块保存变量
pprint模块可以将数据结构保存为可读的Python代码:
importpprintcats= [{'name': 'Zophie', 'desc': 'chubby'}, {'name': 'Pooka', 'desc': 'fluffy'}]pprint.pformat(cats)file_obj=open('myCats.py', 'w')file_obj.write('cats = '+pprint.pformat(cats) +'\n')file_obj.close()1️⃣1️⃣文件操作项目:生成随机测验试卷
编写一个程序生成多份随机排列问题的测验试卷及答案:
import randomcapitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', ...} # 更多州和首府for quiz_num in range(35): # 创建测验和答案文件 quiz_file = open(f'capitalsquiz{quiz_num + 1}.txt', 'w') answer_key_file = open(f'capitalsquiz_answers{quiz_num + 1}.txt', 'w') # 写入测验标题 quiz_file.write('Name:\n\nDate:\n\nPeriod:\n\n') quiz_file.write(f'{" " * 20} State Capitals Quiz (Form {quiz_num + 1})\n\n') # 打乱州的顺序 states = list(capitals.keys()) random.shuffle(states) # 为每个州生成一个问题 for question_num in range(50): correct_answer = capitals[states[question_num]] wrong_answers = list(capitals.values()) del wrong_answers[wrong_answers.index(correct_answer)] wrong_answers = random.sample(wrong_answers, 3) answer_options = wrong_answers + [correct_answer] random.shuffle(answer_options) # 写入问题和选项 quiz_file.write(f'{question_num + 1}. What is the capital of {states[question_num]}?\n') for i in range(4): quiz_file.write(f' {"ABCD"[i]}. {answer_options[i]}\n') quiz_file.write('\n') # 写入答案 answer_key_file.write(f'{question_num + 1}. {"ABCD"[answer_options.index(correct_answer)]}\n') quiz_file.close() answer_key_file.close()小结
文件路径操作:使用os.path模块处理文件路径,包括获取绝对路径、分割路径、检查文件存在性等。
读写文件:通过open()、read()、write()等方法实现文件的读取和写入。
保存变量:利用shelve和pprint模块将变量保存到文件中。
文件操作项目:生成随机测验试卷的项目展示了综合运用文件操作的能力。
✅ 总结
文件路径处理:掌握路径的组成和操作,灵活使用os.path模块。
文件读写:学会以不同模式打开文件,并进行读写操作。
变量保存:使用shelve和pprint模块保存和读取变量。
项目实践:通过生成测验试卷的项目,加深对文件操作的理解。
📢 互动提问
你在处理文件路径和文件操作时,遇到过哪些挑战?是如何解决的?