Python5文件和数据处理

习题

1、输入一个年份,输出是否为闰年,(能被4整除但是不能被100整除,或者能被400整除.)

year = eval(input("请输入一个年份:"))
if (year % 400 == 0) or (year % 100 == 0 and year % 4 != 0):
	print("{}is leap year".format(year))
else:
	print("{}is common year".format(year))

2、输入一个五位数,判断该数字是否为回文数。
(回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。)例如:12321

s = input("请输入回文数:")
方法一
if s[0] == s[-1] and s[1] == s[-2]:
	print("is palindromes")
方法二
if s == s[::-1]
	print("is palindromes")

3、编写程序,从键盘上获得用户连续输入且用逗号分隔的若干个数字(不必以逗号结尾),计算所有输入数字的和并输出。
例如:输入 1,2,3,4,5
输出 15


4、键盘输入一个 9800 到 9811 之间的正整数 n ,作为 Unicode 编码,把 n -1 、 n 和 n + 1 三个 Unicode 编码对应字符
按照如下格式要求输出到屏幕:宽度为11 个字符,加号字符+填充,居中。
例如:键盘输入: 9802 屏幕输出:++++♉♊♋++++

n = eval(input("请输入一个介于9800-9811的正整数"))
print("{:+^11}{:+^11}{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))
宽度11局中+填充
注意format括号内字符用加号连接才能最终打印出三个字符

文件打开方式

文件

文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容
文件包括两种类型:文本文件和二进制文件

文件的类型

  1. 文本文件:一般由单一特定编码的字符组成,e.g.UTF-8编码
  2. 二进制文件L直接由比特0和比特1组哼,文件内部数据的组织格式与文件用途有关,二进制是信息按照非字符但特定格式形成的文件e.g.png格式的图片文件、avi格式的视频文件
  3. 二进制和文本文件的区别:在于是否有统一的字符编码
  4. 无论文件创建为哪种文件均可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同
    采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节流
#文本方式打开
f = open('a.txt','rt')
print(f.readline())
f.close()
#二进制方式打开
f = open('a.txt','rb')
print(f.readline())
f.close()

文件的打开和关闭——打开-操作-关闭

Python通过open()函数打开一个文件,并返回一个操作这个文件的变量
<变量名> = open(<文件路径及文件名>,<打开模式>)

打开模式
‘r’只读模式,如果文件不存在则返回FileNotFoundError,默认值
‘w’覆盖写模式,文件不存在则创建存在则完全覆盖原文件
‘x’创建写模式,文件不存在则创建存在则返回异常FileExistsError
‘a’追加写模式,文件不存在则创建存在则在原文件最后追加内容
‘b’二进制文件模式
‘t’文本文件模式,默认值——‘rt’==‘r’
‘+’与’r/w/t/a’一起使用,在原功能基础上增加同时读写功能,例如:‘r+’,注意’r+‘与’w+’ 有区别
#f是文件对象
f = open('C:\\Users\\11397\\Desktop\\abc.txt','r',encoding = 'utf-8')
#注意转义字符,所以双斜杠或者反斜杠
#当打开的文案和模块在不同目录下,写绝对路径,当在同一目录下,可以写相对路径
f = open('C:/Users/11397/Desktop/abc.txt','r',encoding = 'utf-8')
s = f.read()
print(s)
f.close()

f = open('b.txt','w')
f.write('今天天气真好!')#wirte参数必须是字符串
f.close()

f = open('b.txt','ab')#以二进制流的形式追加写,此时不可以指定编码格式uncoding='utf-8'
f.write('我们去打篮球吧!')
f.close()

文件的读写

文件的读取

f = open('文件.txt','r',encoding = 'utf-8')
s = f.read(3)#读取文本前三个字符
print(s)#type(s) = 'str'
f.close()

f = open('文件.txt','r',encoding = 'utf-8')
s = f.readline()
print(s)
f.close()

f = open('文件.txt','r',encoding = 'utf-8')
s = f.readlines()
print(s)#type(s) = 'list'
f.close()
方法含义
f.read(size=-1)从文件中读入整个文件,参数可选,或读取前size长度的字符串或字节流
f.readline(size=-1)从文件中读入一行内容,参数可选,或读取该行前size长度的字符串或字节流,读取后指针停留在该行行尾
f.readlines(hint=-1)从文件中读取所有行,以每行元素形成一个列表,参数可选,读入hint行
f.seek(offset,whence)改变当前文件操作指针的位置,whence的值:0;文件开头;1:当前位置 2:文件结尾

offset:开始的偏移量,表示要从哪个位置开始偏移,0代表从文件开头算起,1代表从当前位置开始算起,2代表从文件末尾算起
whence:可选,默认值为0

f = open('文件.txt','r',encoding = 'utf-8')
s = f.read(),也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始
print(s)
#第二次读取,由于第一次读完光标停留在末尾,需要用seek定位到开头
string = f.seek(0,0)
print(string)
f.close()

文件的写入

方法含义
f.write()向文件写入一个字符串或字节流
f.writelines(lines)将一个元素为字符串的列表写入文件,无返回值
f = open('文件.txt','w')
f.write('学习很难,但是很快乐!')
f.close()

f = open('文件.txt','w')
ls = ['black\n','white\n','red\n','green\n']
f.writelines(ls)
f.close()

一维数据的处理

数据的组织维度

根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据

  1. 一维数据的存储
    总体思路:采用特殊字符分隔各数据
    1)采用空格分隔 北京 上海 天津 重庆
    2)采用逗号分隔 北京,上海,天津,重庆
    3)采用换行分隔 北京
    上海
    天津
    重庆
    4)采用其他特殊符号e.g.分号分隔 北京;上海;天津;重庆 在csv中逗号相当于换格
    csv(comma-separated values,逗号分隔值)格式:采用逗号分割的存储格式
s = '北京','上海','天津','重庆'
f = open('city.csv','w')
f.write(s)
f.close()
#列表对象输出为csv格式文件
ls = ['北京','上海','天津','重庆']
f = open('city.csv','w')
f.write(','.join(ls))
f.close()

对一维数据处理,首先从csv读入一维数据,并将其表示为列表对象

f = open('city.csv','r')
s = f.read()
print(s.strip('\n').split(','))
f.close()

二维数据的处理

二维数据的存储

二维数据由一维数据组成,用csv格式文件存储
csv每一行是一维数据,整个csv文件是一个二维数据

二维列表对象输出为csv格式文件方法:
采用遍历循环和字符串的join()方法结合

ls=[['学校','报考人数','录取人数','理科人数'],
['xx中学','100','60','30'],
['xx实验中学','150','30','80']]
f = open('school.csv','w')
for row in ls:
	f.write(','.join(row) + '\n')
f.close()

#读取
f = open('school.csv','w')
ls = f.readlines()#将csv一行行读取,形成一个小列表,每一行是一个元素
L = []
for line in ls:
	L.append(line.strip('\n').split(','))
f.close()

二维数据处理等同于二维列表的操作,与一维列表不同,二维列表一般需要借助循环遍历实现对每个数据的处理,基本代码格式如下:
for row in ls:
for item in row:
<对第row行第item列元素进行处理>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值