Python学习——02-Python基础——【4-文件处理与三元运算】

一、文件的操作

 介绍

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

1 #1. 打开文件,得到文件句柄并赋值给一个变量
2 #2. 通过句柄对文件进行操作
3 #3. 关闭文件

1、打开一个文件

语法:

open(filename,mode)

解释:

filename:代表你要访问的文件名

mode:这里代表你打开文件的模式,有 只读,写入,读写,追加等模式;默认为只读模式。

我们可以看下面的列表:

1、读模式 r 以只读方式打开文件。

  文件的指针将会放在文件的开头。这是默认模式

例子:

1 f = open("foo.txt", "r",encoding="UTF-8")  #只读的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 i=f.read()   # 读取文件,bing 赋值给i
3 print(i)     #打印i
4 f.close()    #关闭文件夹

输出:

Python 是一个非常好的语言。
 是的,的确非常好!!

2、读写模式 r+ 打开一个文件用于读写。

文件指针将会放在文件的开头。

例子:

1 f = open("foo.txt", "r+",encoding="UTF-8")  #读写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 i=f.read()   # 读取文件,bing 赋值给i
3 print(i)     #打印i
4 f.write("我要学Python\n")       #写入
5 # f.flush()
6 f.close()    #关闭文件夹

输出:

我要学Python
我要学Python

3、写模式 w 打开一个文件只用于写入。

如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

例子:

1 f = open("foo.txt", "w",encoding="UTF-8")  #写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 f.write("我要学Python\n")       #写入,文件夹存在覆盖,不存在创建
3 f.close()    #关闭文件夹

4、读写模式 w+ 打开一个文件用于读写。

如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

例子:

1 f = open("foo.txt", "w+",encoding="UTF-8")  #写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 f.write("我要学Python\n")       #写入,文件夹存在覆盖,不存在创建
3 print("定位之前的光标位置:%s" % (f.tell()))
4 f.flush()                       #刷新文件使内存的内容刷新至文件夹
5 f.seek(0)                       #因为W+读取文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
6 print("定位之后的光标位置:%s" % (f.tell()))
7 i = f.read()
8 print(i)
9 f.close()    #关闭文件夹

输出:

定位之前的光标位置:17
定位之后的光标位置:0
我要学Python

5、追加 a 打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

例子:

1 f = open("foo.txt", "a",encoding="UTF-8")  #追加方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 f.write("我要学Python\n")       #写入,文件夹存在追加,不存在创建
3 print("定位之前的光标位置:%s" % (f.tell()))
4 f.seek(0)                       #因为a追加文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
5 print("定位之后的光标位置:%s" % (f.tell()))
6 f.close()    #关闭文件夹

6、追加读 a+打开一个文件用于读写。

如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

例子:

1 f = open("foo.txt", "a+",encoding="UTF-8")  #追加读方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 f.write("我要学Python\n")       #写入,文件夹存在创建,不存在创建
3 print("定位之前的光标位置:%s" % (f.tell()))
4 f.flush()                       #刷新文件使内存的内容刷新至文件夹
5 f.seek(0)                       #因为W+读取文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
6 print("定位之后的光标位置:%s" % (f.tell()))
7 i = f.read()
8 print(i)
9 f.close()    #关闭文件夹

输出:

1 定位之前的光标位置:136
2 定位之后的光标位置:0
3 我要学Python
4 我要学Python
5 我要学Python
6 我要学Python
7 我要学Python

二、文件的操作方法

文件的常用方法有13种,如下图:

文件的file.close、file.flush、file.seek、file.tell在前面文件的读、写、追加已经介绍过了这里就不一一说了,下面我们说一下剩余的几种方法吧!

1、fileno()

方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作

语法:

fileObject.fileno()

返回值:文件描述符

例子

1 f = open("foo.txt", "a+",encoding="UTF-8")  #追加读方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
2 fid = f.fileno()
3 print("文件的描述符为:",fid)
4 f.close()    #关闭文件夹

输出:

文件的描述符为: 3

2、next()

返回文件的下一行

语法:

next(iterator[,default])

例子:
1 # 打开文件
2 fo = open("foo.txt", "r",encoding="UTF-8")
3 print ("文件名为: ", fo.name)
4 for index in range(5):
5     line = next(fo)
6     print ("第 %d 行 - %s" % (index, line))
7 # 关闭文件
8 fo.close()

输出:

# 文件名为:  foo.txt
# 第 0 行 - 我要学Python0
# 第 1 行 - 我要学Python1
# 第 2 行 - 我要学Python2
# 第 3 行 - 我要学Python3
# 第 4 行 - 我要学Python4

3、read方法:

用于从文件读取指定的字节数,如果为给定或为负则读取所有

语法:

fileObject.read()

例子:

 1 fo = open("foo.txt", "r",encoding="UTF-8")
 2 print ("文件名为: ", fo.name)
 3 line = fo.read()       #不指定字符节读取所有
 4 print(line)
 5 fo.close()    # 关闭文件
 6 # 如下:
 7 # C:\Python35\python.exe D:/linux/python/all_test/总练习.py
 8 # 文件名为:  foo.txt
 9 # 我要学Python0
10 # 我要学Python1
11 # 我要学Python2
12 # 我要学Python3
13 # 我要学Python4
14 # 我要学Python5
15
16 ===========================================
17 fo = open("foo.txt", "r",encoding="UTF-8")
18 print ("文件名为: ", fo.name)
19 line = fo.read(16)       #指定读取16字节
20 print(line)
21 fo.close()    # 关闭文件

输出:

# 文件名为:  foo.txt
# 我要学Python0
# 我要学Py

4、readline()

方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。

语法:

fileObject.readline()

例子:

 1 fo = open("foo.txt", "r",encoding="UTF-8")
 2 print ("文件名为: ", fo.name)
 3 line = fo.readline(3)       #指定读取16字节
 4 print("读取指定的字符串为:%s" % (line))
 5 print("光标现在的位置:%s" %(fo.tell()))
 6 fo.seek(0,0)          #之所以用这个是因为前面已经读了16个字符了所以要把光标调到0 的位置
 7 print("调整后光标的位置:%s" %(fo.tell()))
 8 line = fo.readline()       #读取第一行
 9 print("读取第一行:%s" % (line))
10 fo.close()    # 关闭文件

输出:

# 文件名为:  foo.txt
# 读取指定的字符串为:我要学
# 光标现在的位置:9
# 调整后光标的位置:0
# 读取第一行:我要学Python0

5、readlines()

方法用于读取所有行(直到结束符 EOF)并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。如果碰到结束符 EOF 则返回空字符串。

语法:

fileObject.readlines()

例子:

1 fo = open("foo.txt", "r",encoding="UTF-8")
2 print ("文件名为: ", fo.name)
3 line = fo.readlines(3)       #指定读取3字节
4 print("读取指定的字符串为:%s" % (line))
5 for line in fo.readlines():
6     line = line.strip("\n")     #使用strip去掉换行符/n
7     print("读取所有行:%s" % (line))
8 fo.close()    # 关闭文件

输出:

文件名为:  foo.txt
读取指定的字符串为:[‘我要学Python0\n‘]
读取所有行:我要学Python1
读取所有行:我要学Python2
读取所有行:我要学Python3
读取所有行:我要学Python4
读取所有行:我要学Python5
读取所有行:我要学Python6
读取所有行:我要学Python7

6、truncate()

方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则重置到当前位置。

语法:

fileObject.truncate( [ size ])例子1:
1 fo = open("foo.txt", "r+",encoding="UTF-8")
2 line = fo.readline()
3 print ("读取行: %s" % (line))
4
5 fo.truncate()
6 line = fo.readlines()
7 print ("读取行: %s" % (line))
8 fo.close()    # 关闭文件

输出:

读取行: 我要学Python1

读取行: [‘我要学Python2\n‘, ‘我要学Python3\n‘, ‘我要学Python4‘]
例子2:
1 fo = open("foo.txt", "r+",encoding="UTF-8")
2 fo.truncate(10)            #截取10个字符,其余的清空
3 line = fo.read()
4 print ("读取的数据: %s" % (line))
5 fo.close()    # 关闭文件

输出:

读取的数据: 我要学P

7、writelines()

方法用于向文件中写入一序列的字符串,这一序列字符串可以是由迭代对象产生的,如一个字符串列表,换行需要制定换行符 \n。

语法

writelines() 方法语法如下:

fileObject.writelines( [ str ])例子:
1 fo = open("foo.txt", "a+",encoding="UTF-8")
2 seq = ["我要学Python 1\n", "我要学Python 2"]
3 fo.writelines( seq )
4 fo.flush()
5 fo.seek(0,0)                                            #跳到行首
6 line = fo.readlines()                                 #读取所有行
7 print ("读取的数据: %s" % (line))
8 fo.close()    # 关闭文件

输出:

读取的数据: [‘我要学Python 1\n‘, ‘我要学Python 2‘]

三元运算

 

一、三元运算符

三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值

格式:[on_true] if [expression] else [on_false]

res = 值1 if 条件 else 值2

1.举例说明:

a =1

b = 2

c= a if a>1 else b #如果a大于1的话,c=a,否则c=b

如果不用三元运算符,就用if-else条件判断,如下:

a = 1

b = 2

if a >1:

c = a

else:

c = b

2.三元运算符也可以用在列表和字典中

例:1-10的数字,打印出其中的偶数

三元运算:

ss = [i for i in range(1,11) if i%2==0 ] #循环1-11间的值(不包括11),如果值能被2整除(即取偶数),就写到ss这个list中

print(ss) #最终打印结果 [2, 4, 6, 8, 10]

if-else条件判断

s = []

for i in range(1,11):

if i %2==0:

s.append(i)

print(s)

二、集合

集合:set持有一系列元素,和list很像,也是一种数据类型,但是set的元素没有重复,而且是无序的

特点:set不包含重复的元素(天生去重)且无序

2.集合的定义

a.定义一个列表,通过强制转换来定义集合

nums = [1,1,2,3,5,6,77,8]

num_set = set(nums)

b.直接定义

num_set1={1,2,3,3,4}

集合不能通过下标来访问元素

3.循环遍历set

s = set([‘Adam‘, ‘Lisa‘, ‘Bart‘])

for name in s:

print (name)

结果:

Lisa

Bart

Adam

4.添加元素

s = {1,2,3}

s.add(4)

print(s)#结果 {1, 2, 3, 4}

s.update([333,444,333])

s.update({56,78,999})

5.删除元素

s.remove(333) #删除元素,如果元素不存在就会报错

s.pop() #删除一个随机的元素,并返回删除的元素

s.discare(111) #如果删除的元素存在,删除,不存在不做处理

三、函数

1.什么是函数?

定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

2.使用函数的好处

a.简化代码

b.提高代码的复用性

c.代码可扩展

3.python中函数定义

def functionname( parameters ): function_suite return [expression]

说明:def为关键字,后面为函数名,函数名不能重复,括号中内容为参数,根据实际情况,定义你需要的参数个数

function_suite 为 函数体

return 为返回值 如果不写return这一行的话,默认返回为None

4.函数调用

def hello():

print(‘hello!‘)

hello() #函数调用,函数调用的方式为,函数名后跟括号

5.形参和实参

函数在调用的时候,可以传入参数,有形参和实参

形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

实参:实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。函数调用结束返回主调用函数后则不能再使用该形参变量。

6.函数的参数类型

函数的四种参数类型:位置参数、默认参数、不定长参数、关键字参数

位置参数:

位置参数,就是按照参数的位置来进行传参

例:

def reg(name,age):

print(‘hello %s,age is %s‘ %(name,age))#name,age是必填参数,位置参数

reg(‘hhf‘,27)

说明:有几个位置参数在调用的时候就要传几个,否则就会报错

如果有多个位置参数,但却记不住参数的位置,可以使用位置参数的名字来指定调用

具体调用为reg(name=‘huihui‘,age=25),这种调用方式叫做关键字传参

默认参数:

默认参数就是在定义形参的时候,给函数默认赋一个值

默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义

例:

def reg(name,age,sex=‘男‘):

print(‘hello %s,age is %s‘ %(name,age))#name,age是必填参数,位置参数 #sex是默认值参数,不是必填参数

reg(‘hhf‘,27)#不传sex,sex使用默认值参数,sex=‘男‘

reg(‘huihui‘,28,‘女‘) #给sex传值,sex=‘女‘

非固定参数:

上面的两种位置参数和默认参数都是参数个数是固定的

如果有一个函数,参数不是固定的,也不知道函数会扩展成啥样,可能参数越来越多,这个时候如果使用固定的参数,后面程序就不好扩展,这时候就可以用非固定参数了

非固定参数有两种,一种是可变参数,一种是关键字参数

可变参数:

可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的。

例:

def post(*args):

print(args)

post(‘001‘,‘denglu‘,‘http://www.baidu.com‘,post,a=1)

post()

说明:可变参数,也叫参数组,也不是必填的,它接收到的是一个元组

它把调用函数时传进去的每一个参数到一个元组里

关键字参数:

关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个,当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面。

使用关键字参数的话,调用的时候必须使用关键字传参,关键字参数也是非必传的

例:

def kw(**kwargs):

print(kwargs)

kw()

kw(age=18,name=‘aaa‘)

d={‘age‘:18,‘name‘:‘aaa‘}

kw(**d)

说明:关键字参数,接收的是一个字典,调用得用xx=11,也不是必填的

传入字典调用的时候就得写**{‘age‘:18,‘name‘:‘aaa‘}

其它例子:

def other2(name,country=‘china‘,*args,**kwargs):

print(name)

print(country)

print(args)

print(kwargs)

other2(‘hhf‘)

other2(‘niuhui‘,‘beijing‘,‘python‘,‘changping‘,user=‘niu‘)

说明:如果必填参数,默认值参数,可变参数和关键字参数要一起使用的话,

必须参照必填参数、默认值参数、可变参数和关键字参数的顺序接收,否则会报错

def write(filename,model,ending,user,os,money,other):

print(filename)

print(model)

print(ending)

print(user)

print(os)

print(money)

print(other)

write(os=‘Windows‘,user=‘wubing‘,model=‘w‘,filename=‘a.tx‘,ending=‘utf8‘,money=9999,other=‘xxx‘)

-#write(os=‘windows‘,‘a.txt‘) #位置参数调用参数必须在关键字调用前,否则报错

write(‘a.txt‘,‘w‘,‘gbk2312‘,‘hhf‘,os=‘windwos‘,money=9999,other=‘xxx‘)

7.函数返回值

def plus(a,b):

c=a+b

return c

说明:

a函数碰到return,立即结束这个函数

b调用完函数之后,返回计算结果

c函数可以没有返回值,如果没有返回值的话,默认返回None,如果这个函数的处理

结果我们需要在别的地方用到,就得给函数一个返回值

如果函数return多个值的话,那么它就会把多个值放到一个元组里面去

score1 = 50

score2 = 90

def echo():

return score1,score2

8.局部变量和全局变量

局部变量:在局部内生效,出了这个变量的作用域,这个变量就失效了

全局变量:在整个程序里面都生效的,在程序最前面定义的都是全局变量

-# score3 = [1,2,3,4,5]

-# score3 = {"id":1}

score3 = 100

def my_open():

fw = open(‘a.txt‘,‘a+‘)

fw.seek(0)

print(‘score3‘,score3)

d={‘id‘:2}

d[‘price‘]=99

说明:

a.在函数里面定义变量叫局部变量,它只能在函数里面用,出了该函数外,就不能使用了

b.在函数外面定义的变量,是全局变量,在函数内也可以使用

c 如果想在函数里面修改全局变量的值,那么要先用global关键字声明

要修改全局变量是int、string的话,必须得写global

如果是字典和list的话,要修改的话,不能加global

 
 转载;https://www.cnblogs.com/hhfzj/p/6978092.html

原文地址:https://www.cnblogs.com/caofu/p/8707859.html

时间: 2024-10-15 03:31:10

Python学习——02-Python基础——【4-文件处理与三元运算】的相关文章

【python学习02】- open读写文件

#coding=utf8 f = open('f:\xusj.txt','w')    #打开xusj.txt,并写入文件 f.write('hello,')              #写入字符串 f.write('i play python!')      #继续追加写入字符串 f.close                        #关闭字符串 f = open('f:\xusj.txt','r')    #读取文件内容 c = f.readline()               

python学习—-day1.计算机基础

python学习-day1.计算机基础 一.计算机系统的硬件组成部分:电脑的三大件:内存.硬盘.cpu 二.编程语言的作用及操作系统和硬件的关系:答:1.编程语言的作用是与计算机沟通,并且可以用编程语言在操作系统上写程序,从而达到开发应用软件的目的2.操作系统是用来管理计算机硬件资源的 三.应用程序->操作系统->硬件:在硬件之上装操作系统,在操作系统上装应用程序1.应用程序是指程序员开发的可运行的软件2.操作系统的目的是用来管理计算机硬件的3.硬件:cpu.硬盘.内存.键盘.鼠标统称为电脑硬

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

Python学习系列(五)(文件操作及其字典)

Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: 1 #coding:utf-8 2 fn='test1.py' 3 fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py 4 print 'reading pos:',fp.tell() 5 r=fp.read(20) #

总结:Python学习 和 Python与C/C++交互

本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者和运维的心.据说,Python 在科学计算领域,逐步吞噬着古老语言 Fortran的份额.这门语言是Google的第二语言,国内的知乎,豆瓣,都使用纯Python开发.Python的官方网站:http://www/python.org. 为了逐步完善的我们的数据库驱动服务,我们需要为客户提供更多,更

Python学习教程(Python学习路线+Python学习视频):Python数据结构

Python学习教程(Python学习路线+Python学习视频):Python数据结构   数据结构引言:   数据结构是组织数据的方式,以便能够更好的存储和获取数据.数据结构定义数据之间的关系和对这些数据的操作方式.数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方式. 在这篇文章中,你将了解到多种数据结构以及这些数据结构在Python中实现的方式.    抽象数据类型和数据结构 数据结构是抽象数据类型(ADT)的实现,通常,是通过编程语言提供的

Python学习之旅 —— 基础篇(三)set集合、函数、文件操作

本篇要点: 数据类型:set集合 函数 文件操作 三元运算(三目运算)和lambda表达式 一.set集合 python中数据类型的一种,是无序并且不重复的数据集合.set源码: class set(object): """ 创建set集合 set() -> new empty set object 把可迭代的数据类型转换成元组 set(iterable) -> new set object Build an unordered collection of uni

Python学习记录(基础)

Python基础 1.写在前面 最近在学习Python,对学习到的知识和学习中产生的思考或想法进行一些总结,尽量让自己的知识逻辑结构显得清晰并让自己了解的更透彻一些.鉴于刚学习水平有限,一些想法和思考会留在以后实现和解决. 本人再用Python3.5版本,所以Python标准库参考的是3.5.2版本的. 2.编码布局 # 1.起始行(类unix) :具有起始行的程序输入文件名即可运行,不需要调用python解释器,写的是文件绝对路径. # 2.模块文档   :简要介绍模块的的功能,全局变量的含义

Python学习笔记-Day1-Python基础

1.python诞生 关于Python的起源,吉多·范罗苏姆在1996年写到: 六 年前,在1989年12月,我在寻找一门"课余"编程项目来打发圣诞节前后的时间.我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西.我决定 为当时我正构思的一个新的脚本语言写一个解释器,它是ABC语言的后代,对UNIX / C程序员会有吸引力.作为一个略微有些无关想法的人,和一个蒙提·派森的飞行马戏团的狂热爱好者,我选择了Python作为项目的标题 吉多·范罗苏姆GITHUB:https://gi

Python学习总结之一 -- 基础篇

Python学习第一篇 一:写在前面 啊,最近我的新博客一直都没有更新学习内容了,只是最近一直都在忙着寻找实习机会(或许这只是一个借口,真实原因是我太懒惰了,改改改!).终于今天又投递了几个新的实习职位之后幡然醒悟,我的执行力还是太弱了,我得更加有自律性更加坚持才行.所以今天,我把之前学习的Python基础知识总结一下. 二:认识Python 首先我们得清楚这个:Python这个名字是从Monty Python借鉴过来的,而不是源于大家所知道的大蟒蛇的意思.我们为什么要学习Python呢?就我而