文件路径与文本读写

  • 2.1文件路径
  • 2.2读写文件
  • 2.3 shelve模块:常用
  • 2.4 pprint模块:简单数据类型
  • 2.5 项目实战

2.1文件路径

  • os模块
  • 工作空间
  • 不同系统不同路径格式
  • 绝对路径、相对路径
  • 创建新的文件夹
  • os.path
    • 路径转换
    • 文件类型与大小
    • 文件是否存在
import os path = os.getcwd()
# 改变工作路径
os.chdir('d:\\vs_code_python\\days_100\\res')
# 连接路径
path1 = os.path.join(path,'正则表达式.inynb')
# 获得电脑上的路径格式
print(path1)
# 绝对路径 d:\\vs_code_python\\days_100\\res
# 相对路径 ../ 上一级 ./同级
# 创建文件夹
# os.makedirs('../exercise')
# os.path模块
# 相对路径和绝对路径的转换
os.path.abspath('.')
os.path.abspath(path1)
os.path.isabs('./')
os.path.relpath('d:\\vs_code_python\\days_100\\exercise\\day_1.py',path1)
# 调用上一级\\exercise即可

# 名字basename和dirname
print(os.path.basename(path1))
print(os.path.dirname(path1))
# 文件大小
print(os.path.getsize(os.path.join(path,'正则表达式.ipynb')))
print(os.listdir(path))
totalsize = 0
for filename in os.listdir(path):totalsize+= os.path.getsize(os.path.join(path,filename))
print(totalsize)
# 该文件夹的字符数
# 检验路径的有效性
print(os.path.exists(path))
print(os.path.isdir(path))
print(os.path.isfile(os.path.join(path,'正则表达式.ipynb')))

2.2读写文件

  • 基础知识

    • 文本文件
    • 二进制文件:颜色、excel等
  • 读取文件
    -写入文件
# 读取文件:open readlines close
fileA = open(os.path.join(path,'hello.txt'))
content = fileA.readlines()
print(content)
fileA.close()
# 写入文件 覆写
fileB= open(os.path.join(path,'write.txt'),'w')
fileB.write('you are stupid!\n')
# 与print自带换行符不同,写入文件要自己编写换行符
fileB.close()
# 写入文件 添加
fileC = open(os.path.join(path,'write.txt'),'a')
fileC.write('foolish\n')
fileC.write('shut up!\n')
fileC.close()

2.3 shelve模块:常用

  • 保存变量为shelve类字典
import shelve
shelfFile = shelve.open('mycats')
cats = ['zhao','qian','sun','li']
shelfFile['cats'] = cats
shelfFile.close()
# 类似一个字典,存储所有变量
shelfFile = shelve.open('mycats')
print(type(shelfFile))
print(shelfFile['cats'])
print(shelfFile.keys())
print(shelfFile.values())
print(list(shelfFile.keys()))
print(list(shelfFile.values()))

2.4 pprint模块:简单数据类型

  • 保存字典列表为模块
import pprintcats = [{'name':'zhao','age':'1'},{'name':'qian','age':'2'}]
pprint.pformat(cats)
#  美化字典输出
fileD=open('mycats.py','w')
fileD.write('cats = ' + pprint.pformat(cats) + '\n')
fileD.close()

2.5 项目实战

  • 编写试卷

    • 将洲及其首府保存到一个字典中
    • 根据字典构造50个问题和35份不同的答案,35份不同的试卷,各有35个文件:循环
    • 问题顺序随机,对每50个问题构造随机答案,正确选项+三个错误选项(随机),选出后再shuffle一次
    • 将问题和答案写入试卷文件同时生成每份试卷的正确答案
  • 多重剪切板
# 编写试卷.
import random
# 生成一个字典
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix', 'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver', 'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee', 'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 'Illinois': 'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansas': 'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 'Maine': 'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 'Missouri': 'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 'Nevada': 'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton', 'New Mexico': 'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh', 'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City', 'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence', 'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee': 'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont': 'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West Virginia': 'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}
# 生成测试试卷文件和答案文件
for quizNum in range(35): quizFile = open('capitalsquiz%s.txt' % (quizNum + 1), 'a')answerFile = open('capitalsquiz_answers%s.txt' % (quizNum + 1), 'a')# 写入试卷标头quizFile.write('Name:\n\nDate:\n\nPeriod:\n\n')quizFile.write((' ' * 20) + 'State Capitals Quiz (Form %s)' % (quizNum + 1))quizFile.write('\n\n')# 随机处理洲名states = list(capitals.keys())random.shuffle(states) # 生成问题for questionNum in range(50):correctAnswer = capitals[states[questionNum]]  # 每个问题生成四个答案wrongAnswers = list(capitals.values())  # 排除正确答案后筛选3个del wrongAnswers[wrongAnswers.index(correctAnswer)] wrongAnswers = random.sample(wrongAnswers, 3) answerOptions = wrongAnswers + [correctAnswer] # 得到所有选项并且随机排序random.shuffle(answerOptions) # 写入试卷文件quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1, states[questionNum]))for i in range(4):quizFile.write('%s. %s\n' % ('ABCD'[i], answerOptions[i]))quizFile.write('\n')# 写入答案文件answerFile.write('%s. %s\n' % (questionNum + 1, 'ABCD'[answerOptions.index(correctAnswer)]))quizFile.close()answerFile.close()
# mcb.pyw 保存和加载文本到剪切板
# 用法:py.exe mcb.pyw save argv[1] <keyword>argv[2] 保存剪贴板内容到某个关键字
# 用法:py.exe mcb.pyw  <keyword>argv[1]  将某个关键字粘贴到剪贴板
# 用法:py.exe mcb.pyw  list argv[1] 所有关键字到剪贴板
# sys读取命令行参数
import sys,shelve,pyperclipmcbshelf = shelve.open('mcb')
if  len(sys.argv) == 3 and sys.argv[1].lower() == 'save':mcbshelf[sys.argv[2]] = pyperclip.paste()
elif len(sys.argv) == 2:if sys.argv[1].lower() == 'list':pyperclip.copy(str(list(mcbshelf.keys())))  # 所有关键字被粘贴到剪贴板elif sys.argv[1] in mcbshelf:   pyperclip.copy(mcbshelf[sys.argv[1]]) # 如果是关键字,则粘贴到剪贴板
# 列出关键字和加载内容
mcbshelf.close()
命令行操作如下:
PS D:\vs_code_python\days_100\res> py clip.pyw save 铭志
PS D:\vs_code_python\days_100\res> py clip.pyw save 刘
PS D:\vs_code_python\days_100\res> py clip.pyw save 红
PS D:\vs_code_python\days_100\res> py clip.pyw save 王
PS D:\vs_code_python\days_100\res> py clip.pyw save 道
PS D:\vs_code_python\days_100\res> py clip.pyw list
PS D:\vs_code_python\days_100\res> py clip.pyw 铭志
PS D:\vs_code_python\days_100\res> py clip.pyw 刘
PS D:\vs_code_python\days_100\res> py clip.pyw 王
结果粘贴到文本中:铭志,囚封天之道,众生需渡无量劫,离开深狱一执念,奉至修真行 铭志,众生亦于无量前,解今...
小兄弟,我看你天庭饱满。紫光透体绝非凡人啊!可惜若无人指点。怕此生婴变无望望
有一种人,天生就是为了战而生;天生就是为了杀戮而存在,天生就是为了逆天而行。王林就是这样
——《仙逆》 耳根

自学编程系列——2 文件路径与文本读写相关推荐

  1. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    原文:学习ASP.NET Core Razor 编程系列十三--文件上传功能(一) 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习A ...

  2. Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

    Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码 目录 文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

  3. 自学编程系列——3 面向对象编程

    面向对象编程 3.1 什么是面向对象编程 3.2 访问可见性问题 3.3 装饰器property 3.4 继承和多态 3.5 三个案例 3.1 什么是面向对象编程 把一组数据结构和处理它们的方法组成( ...

  4. linux c文件路径,LINUX C编程中的文件路径

    你在你的代码有很多的问题, ##define NUMBER arg /* ^^^^^^^^^^^^^^^^^^^ what is this define? */ void *odczyt(void*a ...

  5. 自学编程系列——5 pandas入门

    pandas的学习 5.1 Series数据 5.2 DataFrame创建 总结: 创建方法 5.3 索引对象 5.4 pandas基本功能 5.5 描述性统计 import numpy as np ...

  6. 自学编程系列——4 Numpy数组

    numpy的学习 4.1 notebook的使用 4.2 numpy基础知识 4.3 numpy的索引和切片 4.4 numpy的基本运算 4.5 numpy的数据处理 4.6 numpy线性代数 4 ...

  7. python编程读写文件内容_Python编程中对文件和存储器的读写示例

    #!/usr/bin/python # -*- coding: utf-8 -*- # Filename: using_file.py # 文件是创建和读取 s = '''''我们都是木头人, 不许说 ...

  8. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    原文:学习ASP.NET Core Razor 编程系列十八--并发解决方案 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP. ...

  9. java读取src xml文件路径_Java获取路径方法相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

最新文章

  1. JavaScript两个变量交换值(不使用临时变量)
  2. Altium Designer旋转PCB、PCB中绕某点旋转
  3. error: declaration of 'cv::Mat R ' shadows a parameter
  4. 面试题整理 2:求链表倒数第 k 个结点
  5. 面向对象的经验原则小结
  6. html网页显示时中文乱码
  7. WampServer 给电脑搭建apache服务器和php环境
  8. android 个人标准身高计算器,Android开发:标准身高计算器应用的…
  9. Java开发的文字RPG游戏,代码开源
  10. matlab直方图均衡化实现
  11. u盘怎么装服务器系统教程,u盘装服务器系统教程
  12. 台式机计算机在哪里看,IT教程:台式电脑主板型号在哪里看
  13. 产品分析中如何去做用户调研
  14. android自定义相机打开闪光灯,Android 照相机(闪光灯,切换摄像头)
  15. 国产化服务器安装Mysql数据库
  16. SQL语句中EXISTS的使用详解及示例
  17. windows 服务程序和桌面程序集成(一)
  18. el-table滚动条被挡住的问题
  19. Vscode批量处理
  20. memcpy函数是怎么样实现的

热门文章

  1. 大漠多线程循环任务自动切换模板判断账号登陆成功
  2. Python爬虫实战(1):抓取毒舌电影最新推送
  3. revit翻模中需要绘制路径和边界的构件(楼板,屋顶)怎么做不出错?
  4. 在家上用宽带IPv6网站,下载六维,IPv4 to IPv6
  5. Xamarin.Forms 之我的花园 - 2.从照片库选择图片和拍照功能
  6. 错宗复杂的进程标识PID
  7. 官方scratch3.0正式发布,全面支持移动设备在线编程!
  8. 极速办公(PPT)如何修改文字为斜体
  9. 屏幕适配遇到P30 的坑
  10. 多机器人路径规划CBS/ECBS等 libmultiRobotPlanning 代码阅读笔记