python第七章文件和数据格式化选择题_【Python】2019年二级书编程练习(第七章 文件和数据格式化 简例+习题)...

本文介绍了Python中二进制文件与文本文件的主要区别,强调了字符编码的重要性。讲解了文件的读写操作,如`read()`、`readline()`和`writelines()`等。还详细阐述了如何处理CSV文件,包括写入与读取列表数据,以及转换文件格式。最后,给出了几个涉及文件操作和数据转换的编程练习示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#第7章 文件和数据格式化 打开-操作-关闭

#二进制文件VS文本文件 最主要的区别:是否有统一的字符编码(二进制文件无统一的字符编码,只能当作字节流,不能看作字符串)

#采用文本方式读入文件,文件经编码形成字符串,打印出有含义的字符(一个字符由多个字节表示);采用二进制方式打开文件,文件被解析为字节流

#只读打开'r'和'rb' 可读写打开'r+' 写入'w' 追加写入a+

#读全部,返回字符串:f.read() 读一行f.readline()

#读所有行,返回列表

'''原数据(两行)

第7章 文件和数据格式化 二进制文件VS文本文件 最主要的区别:是否有统一的字符编码(二进制文件无统一的字符编码,只能当作字节流,不能看作字符串)。

采用文本方式读入文件,文件经编码形成字符串,打印出有含义的字符(一个字符由多个字节表示);采用二进制方式打开文件,文件被解析为字节流。

'''

#读文件一行内容:f.readline()

f=open('data.txt','r')

print(f.readline())

f.close() #第7章 文件和数据格式化 二进制文件VS文本文件 最主要的区别:是否有统一的字符编码(二进制文件无统一的字符编码,只能当作字节流,不能看作字符串)。

f=open('data.txt','rb')

print(f.readline())#b'\xb5\xda7\xd5\xc2 \xce\xc4\xbc\xfe\xba\xcd\xca\xfd\xbe\xdd\xb8\xf1\xca\xbd\xbb\xaf \xb6\xfe\xbd\xf8\xd6\xc6\xce\xc4\xbc\xfeVS\xce\xc4\xb1\xbe\xce\xc4\xbc\xfe \xd7\xee\xd6\xf7\xd2\xaa\xb5\xc4\xc7\xf8\xb1\xf0\xa3\xba\xca\xc7\xb7\xf1\xd3\xd0\xcd\xb3\xd2\xbb\xb5\xc4\xd7\xd6\xb7\xfb\xb1\xe0\xc2\xeb\xa3\xa8\xb6\xfe\xbd\xf8\xd6\xc6\xce\xc4\xbc\xfe\xce\xde\xcd\xb3\xd2\xbb\xb5\xc4\xd7\xd6\xb7\xfb\xb1\xe0\xc2\xeb\xa3\xac\xd6\xbb\xc4\xdc\xb5\xb1\xd7\xf7\xd7\xd6\xbd\xda\xc1\xf7\xa3\xac\xb2\xbb\xc4\xdc\xbf\xb4\xd7\xf7\xd7\xd6\xb7\xfb\xb4\xae\xa3\xa9\xa1\xa3\r\n'

f.close()

#遍历读文件

f=open('data.txt','r')

for line in f:

print(line)

f.close()

#输出的两行文字之间有两个空行,因为原文第一行后有一个换行符;用print()输出时默认增加了一个换行

#写入文件

#f.write(s)写入字符串或字节流

#f.writelines(lines)将元素为字符串的列表整体写入文件

#要人为加'\n'对文本分行

ls=['你好呀\n','小汪汪\n','嘻嘻嘻\n']

f=open('data_write.txt','w')

f.writelines(ls)

f.close()

#TypeError: write() argument must be str, not list

ls='你好呀\n','小汪汪\n','嘻嘻嘻\n'

f=open('data_write2.txt','w')

f.writelines(ls)

f.close()

#数据组织的维度

#一维(如列表)、二维(如表格)、高维(键值对)

#一维数据存储方式:采用特殊字符分隔数据,采用逗号分隔字符即.csv

#7.3.2 将列表对象写入.csv文件

ls=['北京','上海','广州','深圳']

f=open('city.csv','w')

f.write(','.join(ls)+'\n')

f.close()

#str.join(iter) 将iter里的每个元素后面增加str字符串

#7.3.2 从.csv文件读入列表对象

f=open('city.csv','r')

ls=f.read().strip('\n').split(',')

f.close()

print(ls)#['北京', '上海', '广州', '深圳']

#从.csv读数据时,最后一个元素包含了换行符——多余的,用字符串的strip()方法去除,再用split()方法以逗号分割数据

#二维列表写入.csv

ls=[['尹','女','嘻嘻'],['王','男','呼呼'],['猪','未知','哼哼']]

f=open('ls2.csv','w')

for row in ls:

f.write(','.join(row)+'\n')

f.close()

c9807479d52d281bb922463843440c0c.png

#从.csv读二维数据,并将其表示为二维列表对象

f=open('ls2.csv','r')

ls=[]

for line in f:#逐行处理:去除行末的换行符、并以逗号分割

ls.append(line.strip('\n').split(','))

f.close()

print(ls)#[['尹', '女', '嘻嘻'], ['王', '男', '呼呼'], ['猪', '未知', '哼哼']]

'''

二维数据(即指二维列表)一般需要借助循环遍历 处理每个数据

for row in ls:

for item in row:

对第row行第item列元素进行处理

'''

69b10736ced28f81e714ccdbfb584e14.png

#第7章习题

#1.输入一个文件和一个字符,统计该字符在文件中出现的次数。

filename=input('输入文件名:')

cha=input('输入字符:')

file=open(filename,'r')

content=file.read()

number=content.count(cha)

file.close()

print('字符{}在文件{}中出现{}次'.format(cha,filename,number))

4ff07add64cae1a2993b4f3a0ca6b2b7.png

#2.假设有一个英文文本文件,编写一个程序读取其内容并将里面的大写字母变成小写字母,小写字母变成大写字母。

filename=input('请输入一个英文文本文件名(含后缀名):')

f=open(filename,'r')

content=f.read()

#法一:swapcase() 方法 用于对字符串的大小写字母进行转换,str.swapcase()

result=content.swapcase()

print(result)

#法二:ord()函数 返回字符/字符串对应的 ASCII 数值,或者 Unicode 数值

result=''

for n in content:

if 65<= ord(n) <=90:

result +=n.lower()

else:

result+=n.upper()

print(result)

#3.生成一个10×10的随机矩阵并保存为文件(空格分隔行向量,换行分隔列向量)

# 再将刚才保存的矩阵文件另存为CSV格式,用Excel或文本编辑器打开看看结果对不对。

from random import *

matrix=''

for y in range(10):

line=''

for x in range(10):

line+='{}'.format(randint(0,9))#randint随机整数

matrix+='{}\n'.format(line)

#使用random 模块的 randint() 函数来生成随机数:random.randint(a,b)包含a和b

#保存为文件

f=open('baocun.txt','w')

f.write(matrix)

f.close()

#另存为CSV格式

csv=open('baocun.csv','w')

new_file=matrix.replace('',',')

csv.write(new_file)

csv.close()

#4.读取一个python源代码文件,将文件中所有 除保留字外的小写字母换成大写字母,

#生成后的文件要能够被Python解释器正确执行。

import keyword

keyword_list=keyword.kwlist

table=["range","print","input","len","list","set"]

#table用来存放源代码中保留字之外的关键字,如库、函数名

#注意:Q4.py中table列表中的元素需视源代码具体情况而定,table用来存放除了保留字以外的关键字,如库名以及函数名,否则会影响生成后的文件(此例为Q4result.py)的运行。

file=open('disiti.py','r',encoding='utf-8')

content=file.read()

file.close()

new=''

temp=''#临时字符串,用于判断和处理

for ch in content:

if ch.isalpha():#若是字母,则加到temp后面,用于后续处理

temp+=ch

else:#若不是字母,表示一个连续字母构成的字符串结束,此时ch非字母

if(not keyword.iskeyword(temp)) and (temp not in table):

temp=temp.upper()#若不是保留字和内置方法,则将其变为大写

new+=temp#将temp添加到new

new+=ch#添加非字母ch

temp=''#清空临时字符串,用于下次使用

new_file=open('disiti_result.py','w',encoding='utf-8')

new_file.write(new)

new_file.close()

#5、将元素为任意Python支持的类型(包括含有半角逗号的字符串)的列表转储为CSV,

# 并能够重新正确解析为列表

#定义处理列表

def save_csv(m,n):

csv=open(m,'w')

t=''

for i in range(len(n)):

t+=str(n[i])+'列表分隔处'

t=t.replace(',','此处为原来的逗号')

x=list(filter(None,t.split('列表分隔处')))

csv.write(','.join(x))

csv.close()

#打开.csv并解析为列表

def open_csv(m):

file=open(m,'r').read()

file=file.replace(',','从此处分隔')

file=file.replace('此处为原来的逗号',',')

new_list=file.split('从此处分隔')

print('解析出的列表为{}'.format(new_list))

#将输入值处理为列表并封装函数

def main():

n=input('输入列表元素,分号分隔:')

m=input('输入要保存的.csv文件名(含后缀名):')

n=n.split(';')

print('输入的列表为{}'.format(n))

save_csv(m,n)

open_csv(m)

main()

2790fcdf8f015ff65192b92bee9d3dc3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值