1.有如下文件,a1.txt,里面的内容为:


某某是最好的学校,

全心全意为学生服务,

只为学生未来,不为牟利。

我说的都是真的。哈哈


分别完成以下的功能:

a,将原文件全部读出来并打印。

答案

f = open('a1.txt',mode='r')
print(f.read())
f.close()
'''
输出结果
老男孩是最好的学校,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈 '''

b,在原文件后面追加一行内容:信不信由你,反正我信了。

答案

f = open('a1.txt',mode='a')
f.write('信不信由你,反正我信了')
f.close()
'''
老男孩是最好的学校,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈信不信由你,反正我信了
'''

c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。

答案

f = open('a1.txt',mode='r+')
f.read()
f.write('信不信由你,反正我信了')
f.close()
'''
老男孩是最好的学校,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈信不信由你,反正我信了
'''

d,将原文件全部清空,换成下面的内容:


每天坚持一点,

每天努力一点,

每天多思考一点,

慢慢你会发现,

你的进步越来越大。

答案

f = open('a1.txt',mode='w')
f.write('''
每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大。
''')
f.close()

2.有如下文件,t1.txt,里面的内容为:


葫芦娃,葫芦娃,

一根藤上七个瓜

风吹雨打,都不怕,

啦啦啦啦。

我可以算命,而且算的特别准:

上面的内容你肯定是心里默唱出来的,对不对?哈哈


分别完成下面的功能:

a,以r的模式打开原文件,利用for循环遍历文件句柄。

答案

f = open('t1.txt',mode='r')
for i in f:
print(i)
f.close()

b,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历 readlines(),并分析b,与c 有什么区别?深入理解文件句柄与 readlines()结果的区别。

c,以r模式读取‘葫芦娃,’前四个字符。

答案

b.
f = open('t1.txt',mode='r')
print(f.readlines())
f.close()
'''
['葫芦娃,葫芦娃,\n', '\n', '一根藤上七个瓜\n', '\n', '风吹雨打,都不怕,\n', '\n', '啦啦啦啦。\n', '\n', '我可以算命,而且算的特别准:\n', '\n', '上面的内容你肯定是心里默唱出来的,对不对?哈哈']
'''
c.
f = open('t1.txt',mode='r')
print(f.read(4))
f.close()
'''
葫芦娃,
'''
b,与c 有什么区别:
1. readlines()一行一行读取全部文件,且结尾会有换行符\n
2. read()是一口气读取全部内容,如果文件文很大容易内存溢出

d,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。

答案

f = open('t1.txt',mode='r')
f1 = f.readline().strip().split('\n')
print(f1)
f.close()
'''
['葫芦娃,葫芦娃,']
'''

e,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将 原内容全部读取出来。

答案

f = open('t1.txt',mode='a+')
f.write('\n'+'老男孩教育')
f.seek(0)
print(f.read())
f.close
'''
葫芦娃,葫芦娃, 一根藤上七个瓜 风吹雨打,都不怕, 啦啦啦啦。 我可以算命,而且算的特别准: 上面的内容你肯定是心里默唱出来的,对不对?哈哈 老男孩教育
'''

3.文件a.txt内容:每一行内容分别为商品名字,价钱,个数。


apple 10 3

tesla 100000 1

mac 3000 2

lenovo 30000 3

chicken 10 3


通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。

答案

lis = []
key_list = ['name','price','amount']
num = 0
with open('a.txt',mode='r') as f:
for l in f:
l_list = l.strip().split()
dic = {key_list[0]:l_list[0],key_list[1]:l_list[1],key_list[2]:l_list[2]}
lis.append(dic)
num = num + int(l_list[1]) * int(l_list[2])
print(lis)
print('总价格为:',num) '''
[{'name': 'apple', 'price': '10', 'amount': '3'}, {'name': 'tesla', 'price': '100000', 'amount': '1'}, {'name': 'mac', 'price': '3000', 'amount': '2'}, {'name': 'lenovo', 'price': '30000', 'amount': '3'}, {'name': 'chicken', 'price': '10', 'amount': '3'}]
总价格为: 196060
'''

4.有如下文件:


alex是老男孩python发起人,创建人。

alex其实是人妖。

谁说alex是sb?

你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。


将文件中所有的alex都替换成大写的SB(文件的改的操作)。

答案

with open('a.txt',mode='r') as f,\
open('a.txt_bak',mode='w+') as f2,\
open('new_a.txt',mode='a') as f1: for i in f:
content = i.replace('alex','SB')
f1.write(content)
import os
os.rename('./a.txt_bak','a.txt')
os.rename('new_a.txt','a.txt')

5.文件a1.txt内容(升级题)


name:apple price:10 amount:3 year:2012

name:tesla price:100000 amount:1 year:2013



.......


通过代码,将其构建成这种数据类型:

[{'name':'apple','price':10,'amount':3,year:2012},

{'name':'tesla','price':1000000,'amount':1}......]

并计算出总价钱。

答案

# 方法一:

lis = []
my_sum = 0
with open('a1.txt',mode='r') as f:
for i in f:
x = i.split()
dic1 = {}
for i1 in x:
k = i1.split(':')[0]
v = i1.split(':')[1]
dic1[k]=v
lis.append(dic1)
print(lis)
for em in lis:
sum = int(em['price'])* int(em['amount'])
my_sum += sum
print(my_sum) '''
输出结果
[{'name': 'apple', 'price': '10', 'amount': '3', 'year': '2012'}, {'name': 'tesla', 'price': '100000', 'amount': '1', 'year': '2013'}]
100030
''' # 方法二:
result_list=[]
sum=0
with open('a1.txt',encoding='gbk') as f:
for line in f:
line_list=line.strip().split()
d={}
for i in line_list:
key, value=i.split(':')
if value.isdecimal():
value=int(value)
d.setdefault(key,value)
sum+=d['price']*d['amount']
result_list.append(d)
print(result_list)
print(sum)
'''
输出结果
[{'name': 'apple', 'price': 10, 'amount': 3, 'year': 2012}, {'name': 'tesla', 'price': 100000, 'amount': 1, 'year': 2013}]
100030
'''

6.文件a1.txt内容(升级题)


序号 部门 人数 平均年龄 备注

1 python 30 26 单身狗

2 Linux 26 30 没对象

3 运营部 20 24 女生多


.......


通过代码,将其构建成这种数据类型:

[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},

......]

答案

# 方法一
l1 = []
dic = {}
with open('a1.txt',mode='r') as f:
f1 = f.readline()
for i in f:
a= i.split()
# print(a)
dic={'序号':a[0],'部门':a[1],'人数':a[2],'平均年龄':a[3],'备注':a[4]}
l1.append(dic)
print(l1)
'''
输出结果
[{'序号': '1', '部门': 'python', '人数': '30', '平均年龄': '26', '备注': '单身狗'}, {'序号': '2', '部门': 'Linux', '人数': '26', '平均年龄': '30', '备注': '没对象'}, {'序号': '3', '部门': '运营部', '人数': '20', '平均年龄': '24', '备注': '女生多'}]
'''
# 方法二
count=0
keys_list=[]
class_list=[]
result_list=[]
with open('a1.txt',encoding='gbk') as f:
for line in f:
count += 1
if count==1:
keys_list=line.strip().split()
continue
else:
class_list=line.strip().split()
d = {}
for j in range(len(keys_list)):
if class_list[j].isdecimal():
d.setdefault(keys_list[j],int(class_list[j]))
else:
d.setdefault(keys_list[j], class_list[j])
result_list.append(d)
print(result_list) '''
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'}]
'''
# 方法三: 思绸之路(附代码)
'''
再看一遍要求哇,原来的文件是以下这种的
a1.txt原文件:
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多 要求: 让你给处理成在种的,仔细看两遍,发现里头有[]这么个玩意儿,人家起名叫列表,最后头还有几个...意思是后面还有很多在样的信息,只要往进加就能处理的了,一句话:能扩展,做哇
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'}...] 1.首先,要处理成列表形式的,那就得先得有个列表[]哇 l1 = [] # 前定义一个空的列表,然后打开人家给的那个文件 with open('a1.txt',mode = 'r', encoding = 'utf-8') # 这串串意思是要打开一个叫a1.txt的文件, 打开方式是读取,意思是不能修改,只能读, 编码用的是utf-8, 一般都用这个就行了. 2. 看第一行行,仔是一个表头:序号 部门 人数 平均年龄 备注 是砸们暂时不需要用到的,先办了他,怎么办?老办法,掐头去尾,把他两边的空格去掉以空格分隔(.strip().split()),处理成了一个列表的形式,列表好控制,字典也是,后头肯定都能用,然后让光标往下挪挪,就是再从第二行开始处理
title = f.readline().strip().split() 3. 按照2的想法,接下来把剩下的也给她处理了,前循环读她
for i in f:
lis = i.strip().split()
print(lis)
因为split处理完字符串,且只能给字符串进行处理,之后会变成一个列表,咋们看看处理成的这个列表是个什样子了
咦,变成个在种的了:
她:
['1', 'python', '30', '26', '单身狗']
['2', 'Linux', '26', '30', '没对象']
['3', '运营部', '20', '24', '女生多'] 4. 一看上头的又不知道该咋处理她了,似乎离目标越来越远了
回头想一想,那个title被处理成什个样子了黑没看了,咱们就前看一看
print(title)
咦,是个在种的:
他:
['序号', '部门', '人数', '平均年龄', '备注'] 仔细看看好像跟上头的有点儿规律了,对应要处理成的样子,索引都是一一对应的,索引就是'1'在的位置跟'序号'在的位置好像是一样的,都是第一个也就是0,因为位置是从0开始么,后头也对应 5.
然后开始循环她们的位置,从0开始怎么循环?当然是for,位置的数量你不知道有多少,因为后头还有很多可能,那就len她,len谁?len 信息最多的那个,还要扩展的那个,因为就她要扩展,就她后来要增加信息
for em in range(len()):
循环出来了,看看她都有那些数量?
print(em,end='')
咦,发现是个在种的:
012340123401234
什么意思? 就是看上头那个信息最多的什么单身狗之类那个,是不是有3个列表,每个里头都循环一个遍,每个里头都是从0开始到4结束,一共5个数字,3个表就3回,所以是上头是那么一串串数字 6.
接下来咋闹呀?
他的位置就是她的位置,她是0,那他也是个0,再看看要求,人家是要处理成一个大列表,里头还包括一堆字典,那得先闹个字典出来哇,咱们先定义一个字典
dic1 = {}
dic1[title[em]] = lis[em] 这个就充分体现了,他的位置等于她的位置,也就是字典的创建的中键值对.
然后咱们看看这个字典是个什么样子的:
{'序号': '1', '部门': 'python', '人数': '30', '平均年龄': '26', '备注': '单身狗'}
{'序号': '2', '部门': 'Linux', '人数': '26', '平均年龄': '30', '备注': '没对象'}
{'序号': '3', '部门': '运营部', '人数': '20', '平均年龄': '24', '备注': '女生多'}
咦,是3个列表而且好像他们都归位了,而且放的还刚刚好 7. 别忘了,人家是要把所有的字典都放在一个列表当中的,咱们最早定义的那个l1的列表终于排上用途了
l1.append(dic1)
在种已操作,字典他就进去了,进去了...进到哪里去了? 进到列表了,额...是我想太多,
看效果:
[{'序号': '1', '部门': 'python', '人数': '30', '平均年龄': '26', '备注': '单身狗'}, {'序号': '2', '部门': 'Linux', '人数': '26', '平均年龄': '30', '备注': '没对象'}, {'序号': '3', '部门': '运营部', '人数': '20', '平均年龄': '24', '备注': '女生多'}]
嗯对比对对比上头人家要求的,好像是这个样子,但是再看看,数字每个囊头都有引号,好像人家没有要求哇,不行还是不太完美,咋可是一个完美主义者,盘他
只能判断了,要是数字,在这个里头机器认得是十进制数,就让他给改了,改成int型也就是整型,就是咱们看到的没有引号的数字,要不是,就不动把原先的插到字典中
if lis[em].isdecimal():
dic1[title[em]] = int(lis[em])
else:
dic1[title[em]] = lis[em]
最后重新把新的字典添加到l1人家要求的列表中,再回再看看效果哇
[{'序号': 1, '部门': 'python', '人数': 30, '平均年龄': 26, '备注': '单身狗'}, {'序号': 2, '部门': 'Linux', '人数': 26, '平均年龄': 30, '备注': '没对象'}, {'序号': 3, '部门': '运营部', '人数': 20, '平均年龄': 24, '备注': '女生多'}]
果然跟人家要求的一模一样了,搞定,交差 上头那么多废话,我下面就这么一串串
l1 = []
with open('a1.txt',mode='r',encoding='utf-8') as f :
title = f.readline().strip().split()
for i in f:
lis = i.split()
dic1 = {}
for em in range(len(lis)):
if lis[em].isdecimal():
dic1[title[em]] = int(lis[em])
else:
dic1[title[em]] = lis[em]
l1.append(dic1)
print(l1)

python之道08的更多相关文章

  1. Python补充06 Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...

  2. 彩蛋 Python之道

    彩蛋 Python之道 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 使用下面的语句可以调出Python中的一个彩蛋, impo ...

  3. 【转】Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录于PEP 20. 语句执行之后,终端 ...

  4. Python之道(一)之安装Python

    "Python之道"首先介绍一下在windows系统下怎样安装Python开发环境. (1)下载MSI安装文件 进入网址www.python.org,点击Downloads进入下载 ...

  5. Python web前端 08 字符串 数组 json

    Python web前端 08 字符串 数组 json 一.string #string 字符串 #索引 下标 偏移量 ---从0开始 str[index]; #通过索引取字符串 可读不可写 str. ...

  6. 一入python深似海--python之道

    python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...

  7. Python 30道高频面试题及详细解答

    开学啦,开学啦!周末坐地铁的时候看到很多同学推着行李箱,拎着大包小包的穿梭在人群中,哎新的一学期又开始啦,同时也意味着很多同学要准备毕业啦,尤其是准大四,准研三的同学. 今年的招聘行情并不乐观,小公司 ...

  8. Python 多道技术以及进程、线程和协程

    多道技术 并发:看起来像同时运行 并行:真正意义上的同时运行,并行肯定是并发 空间的复用与时间复用 空间复用 多个程序用一套计算机硬件 时间复用 程序切换节省时间 ''' 切换(cup)分为两种情况 ...

  9. .Net程序员Python之道---Python基础

    最近对动态语言比较好奇.所以选择了学习Python这门语言.话不多说开始学习笔记. 一. Python 基础: 1. print对Python进行数据输出, #号后面是队友的输出结果, 通过encod ...

随机推荐

  1. codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】

    容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解 然后剩下的情况最 ...

  2. 洛谷P1549 棋盘问题(2)

    P1549 棋盘问题(2) 题目描述 在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数. 例如:当N=2时,有: 其相邻数的和为素数的有: 1+2, ...

  3. birt启动后访问地址详解

    发布设计完成的报表文件,可在web项目中创建reports目录,用于存放报表设计文件. 在应用中通过正确格式的访问路径,例如:http://localhost:8080/birtApp/framese ...

  4. [NOI2002] 贪吃的九头蛇

    考虑任意一种划给大头的方案,两端的都给了大头(bel=1)的边产生难受值,剩下n-k个果子分给m-1个头,当m-1=1时,两端都给了这个小头也产生难受值:而m-1>1的情况要好看的多,贪心的,因 ...

  5. redis之安装

    redis之安装 redis redis介绍 redis是一个key-value存储系统,菲关系型数据库.和Memcached类似,他支持存储的value类型相对更多,包括字符串.列表.哈希散列表.集 ...

  6. 学习笔记之a,b=b,a+b与a=b,b=a+b的区别

       兔子序列中用到的常用的计算方法:a,b=b,a+b 当我们真正去运行的时候,会发现它与a=b,b=a+b是有区别的 实例代码如下: def YY(one): a,b,n=0,1,0 while( ...

  7. echart 初级尝试

    var option = { title: { text: 'ECharts 入门示例'//标题 }, legend: { data:['销量']//图例 }, xAxis: { data: [&qu ...

  8. SocLib的安装

    一.soclib的安装 1.安装g++,一般Ubuntu系统都自带了,所以无需安装.后面这两个软件需要提前安装,不然后面执行相关操作是会报错:sudo apt-get install automake ...

  9. Selenium~自动化测试来了

    这段时候研究了一下Selenium,它是一个自动化测试工具,在asp.net平台可以通过nuget去安装,同时支持多种开发语言,之前支持java,而现在也支持C#了,所以我们通过nuget就可以安装了 ...

  10. cachecloud:Redis云管理平台

    https://github.com/sohutv/cachecloud 一.CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standal ...