#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
# author:Torry Zhang
# contact: zytwell321@163.com
# datetime:2020/10/7 6:17
# software: PyCharm
"""
作业
2. 制作一个"密码薄",其可以存储一个网址(例如 www.itcast.cn),和一个密码(例如 123456),请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能
"""
import os
filename = "password_note.txt"
# if not os.path.isfile(filename):
if not os.path.exists(filename):
# os.mknod(filename) # windows不支持os.mknod()
os.system("type nul>{}".format(filename))
def read_lines():
"""
读取文件内容
:return:文件内容list[]
"""
with open(filename, "r", encoding="utf-8") as f:
return f.readlines() # 返回list[]
f.close()
def read_all():
"""
读取文件所有内容
:return:逐行打印内容
"""
i = 0
with open(filename, "r", encoding="utf-8") as f:
for line in f.readlines():
i += 1
print(i, "---", line, end="")
f.close()
def insert_content():
"""
插入文件内容
:return:
"""
row1 = input("请输入网站地址:")
row2 = input("请输入账号:")
row3 = input("请输入密码:")
with open(filename, "a", encoding="utf-8") as f:
f.write("{}\t\t{}/{}".format(row1, row2, row3) + "\n")
f.close()
def delete_line():
"""
删除文件内容
:return: 删除整行内容或列2/列3内容
"""
row_num = int(input("将删除第几行数据?"))
del_line = read_lines()[row_num - 1]
print("该行数据内容:", del_line)
# TODO 重新write该数据,跳过
def alter_line():
"""
修改文件内容
:return: 修改整行内容或列1/2/3内容
"""
# TODO 修改该行数据
pass
def query_line():
"""
查看文件内容
:return:全部查看或查看某行内容
"""
row_nums = len(read_lines())
selection = input("请输入查询方式:1.查看单行数据\t2.查看所有数据 >>>>>>")
if selection == "1":
row_num = int(input("查看第几行数据?"))
if row_num > 0 and row_num <= row_nums:
print("该行数据:", read_lines()[row_nums - 1])
else:
print("目前只有%d行数据,请重新输入行数。" % row_nums)
elif selection == "2":
print("全量数据内容如下:")
read_all()
print("-" * 50)
else:
print("请输入正确的行号!")
def menu():
while True:
print("=" * 50)
print("1.增加内容\n2.删除内容\n3.修改内容\n4.查看内容\n\n0.退出\n")
option = input("请输入操作选项:")
# 增加一行内容
if option == "1":
insert_content()
# 删除某行内容
elif option == "2":
delete_line()
# 修改某行内容
elif option == "3":
alter_line()
# 查看内容
elif option == "4":
query_line()
elif option == "0":
print("退出当前操作!")
break
else:
print("输入错误,请重新输入!")
def main():
# 2.操作文件
menu()
# 3.关闭文件
if __name__ == "__main__":
main()
遇到问题汇总:
1.windos环境判断文件是否不存在,不存在则创建:
# if not os.path.isfile(filename):
if not os.path.exists(filename):
# os.mknod(filename) # windows不支持os.mknod()
os.system("type nul>{}".format(filename))
2.windos创建文件,可以使用dos命令:type nul>{文件名称} 或 echo nul>{文件名称}
但是 echo 命令会打印回显内容。
3.执行os命令, os.system() 不需要做回传值操作,直接执行操作命令。
os.popen() 执行操作命令的同时返回一个对象。
>>> os.popen("type nul>{}".format(filename))
<os._wrap_close object at 0x00000276693DD248>