#记录python学习中心得体会
实验一:访问指定目录统计各个类型文件个数
import os
import os.path
def countFile(pathh):
all_file = os.listdir(pathh)
type_dict = dict()
for each_file in all_file:
each_file = os.path.join(pathh,each_file)
if os.path.isdir(each_file):
type_dict.setdefault('文件夹',0)
type_dict['文件夹'] += 1
else:
ext = os.path.splitext(each_file)[1]
type_dict.setdefault(ext,0)
type_dict[ext] += 1
for each_type in type_dict.keys():
print('该文件夹下共有类型【%s】的文件%d个'%(each_type,type_dict[each_type]))
countFile('E:\\')
心得:
1.选择合适的类型存储很方便,选择字典,key为文件类型,value为数量。在思考的时候数据操作应该选择合适的结构,往往会事半功倍。
2.在没有学习遍历的时候,递归访问文件夹以及子目录下的所有文件。
3.在被listdir分解后得到的列表中的值是文件名,不能用于判断是否为文件夹,会判断永远都不是文件夹,在判断需要用join讲路径与文件名连接。
实验二: 用户输入内容,保存到某文件。
def file_write(file_name):
f = open(file_name,'w')
print("请输入内容【单独输入\' :q \' 保存退出】")
while True:
file_content = input()
if file_content != ':q':
f.write("%s\n" % file_content)
else:
break
f.close()
def file_write2(file_name,stopword):
f = open(file_name,'w')
print("请输入内容【单独输入\' %s \' 保存退出】" %stopword)
file_connent = ''
for line in iter(input,stopword):
file_connent = file_connent + line + "\n"
#输出到文件f
print(file_connent,file=f)
f.close()
file_name = input("请输入文件名:")
stopword = input("请输入结束标志:")
##file_write(file_name)
file_write2(file_name,stopword)
心得:
1:input 内容不能换行,换行符是input函数默认结束方式,两种方式解决问题。(1)结束符号换成用户指定的符号 (2)输入换行符后不让其结束, (1)方法用到iter函数改变其结束符号
#插曲
iter函数
iter 有两个参数
没有第二个参数,第一个参数是支持迭代的序列对象或者集合对象
有第二个参数,第一个参数是可调用对象,调用对象没有参数,当返回值为第二个参数时,停止调用抛出异常,否则返回当前值
(2)在一个永远不结束的循环中,只要输入内容不等于指定结束符号就不退出。
2. print 参数 file 指输出到指定文件
实验三:查找目标目录下在所有txt文件中查找关键字,并显示出现在第几行什么位置
import os
def findFile(Sdir,target):
os.chdir(Sdir)
row = 0
for each_file in os.listdir(os.curdir):
if os.path.splitext(each_file)[1] == '.txt':
f = open(each_file,'r')
for each_line in f:
row += 1
temp = each_line.find(target)
if temp != -1:
print(os.getcwd() + os.sep + each_file)
print("出现在%d行,第【%d,%d】"%(row,temp,temp+5) + '\n')
row = 0
if os.path.isdir(each_file):
findFile(each_file,target)
os.chdir(os.pardir)
Sdir = input("请输入待查找的初始目录 ")
target = input("搜索的关键字 ")
findFile(Sdir,target)
心得:
1.这里原来是出现了一处逻辑错误,后来结果看出来了,幸好不然我应该不会在深入整个函数过程。检查函数逻辑思路很有必要。减少逻辑错误
2.在字符串计算中,中文和英文都是占1个字节,难以致信
3.os.sep 表示当前操作系统路径符号
最大体会:了解方法的返回值是什么很重要