您的位置:首页 > 编程语言 > Python开发

PYTHON文件操作和列表的使用

2016-05-23 10:32 621 查看
本节所讲内容:

       1)文件的基本操作

       2)列表的基本操作

       3)元组的介绍

       4)实战:创建一个购物程序

 

文件的基本操作

3.1          打开文件

python中使用open函数来打开文件(默认函数方式,可以省略)

语法格式:

open(文件名,文件模式,缓冲)

其中,文件模式和缓冲都是可选项

>>> f =open('name_list')

 

如果打开的文件不存在,会出现以下报错

>>> f = open('name')

Traceback (most recent calllast):

  File"<stdin>", line 1, in <module>

IOError: [Errno 2] No suchfile or directory: 'name'

 

3.1.1 文件模式

open函数中模式参数的常用值



描述

r

读模式

w

写模式

a

追加模式

b

二进制模式(可添加到其他模式中使用)

+

读/写模式(可添加到其他模式中使用)

 

b’模式改变处理文件的方法。一般来说,Python假定处理的是文本文件(包含字符)。通常这样做不会有任何问题。但如果处理的是一些其他类型的文件(二进制文件),比如声音剪辑或者图像,那么应该在模式参数中增加‘b’。参数 ‘b’可以用来读取一个二进制文件。

 

3.1.2 缓冲

open函数的第3个参数(可选)控制着文件的缓冲。如果参数是0(或者False),I/O(输入/输出)就是无缓冲的(所有的读写操作都直接针对硬盘);如果是1(或者是True),I/O就是有缓冲的(意为着Python使用内存来代替硬盘,让程序更快,只有使用flush或者close是才会更新硬盘上的数据)。大于1的数字代表缓冲区的大小(单位是字节),-1(或者是任何负数)代表使用默认的缓冲区大小。

 

3.2          基本的文件方法

3.2.1 写文件

>>> newfile =file('a.txt','w')                                #创建一个新的文件a.txt

>>>newfile.write('Hello,World!!!')                        #在文件中写入“Hello,World!!!”

>>> newfile.flush()                                               #刷新文件内容

>>> newfile.close()                                               #关闭文件

 

在另外一个终端查看发现已经生成了a.txt文件,查看文件内容已经生成

注:在Python中对文件进行写入操作时,默认保存在内存中1024字节的内容,在没有对文件执行close关闭时,不写入磁盘,这样有利于提高运行效率,如果写入的内容操作1024字节,将会自动写入磁盘

 

补充一下:

python中中文的输入方式

Python默认的字符编码ASCII,如果要想让输出内容显示中文在脚本中转换一下字符编码

#coding=utf-8

 

[root@xuegod163 test]# ls

a.txt 

[root@xuegod163 test]# cata.txt

Hello,World!!![root@xuegod163test]#

 

注:

1)如果这里要换行显示,可以在写入的内容之后加上换行符“\n”

>>>newfile.write('Hello,World!!!\n')

2)如果原本已经存在a.txt文件,再次进行写操作的话,将会重新创建文件

>>> newfile =file('a.txt','w')

>>> newfile =file('a.txt','w')

执行完此操作后再次查看a.txt,发现内容为空

3)在Python中要慎用‘w’

 

3.2.2 读文件

>>> f =file('a.txt','r')                                                          #指定文件模式为读模式  

>>> f.read()                                                                        #读取文件全部内容

'Hello,Girl!!!Hello,Boy!!!Hello,Boy!!!\nHello,Boy!!!\n'

 

>>> f =file('a.txt','r')

>>> f.read(5)                                                                       #指定读文件的字节数

'Hello'

>>> f.read()                                                          #再次执行,读取文件剩下的全部内容

'!!!Hello,Boy!!!Hello,Boy!!!\nHello,Boy!!!\n'

 

>>> f =file('name_list','r')                                    #文件模式“r”可以省略

>>> f.readline()                                                    #逐行读取文件内容

'01\tZhaoXiangJie\tIT\t99\t99\t99\t99\r\n'           #文件第一行

>>> f.readline()                                     

'02\tLiuBei\t\tSHU\t98\t78\t83\t80\r\n'                #文件第二行

…………

 

3.2.3 追加文件

>>> f =file('a.txt','a')

>>>f.write('Hello,Boy!!!\n')

>>> f.flush()

>>> f.close()

 

[root@xuegod163 test]# cata.txt

Hello,Girl!!!Hello,Boy!!!

 

3.2.4 管式输出

cat   文件  | python  脚本

cat读取到的文件的内容通过管道作为脚本执行的标准输入(stdin),脚本中通过插入sys模块,引用文件的内容

 

例:

[root@localhost ~]# vimpipe.py

#!/usr/bin/env python

import sys

text = sys.stdin.read()

words = text.split()

wordcount = len(words)

print "Wordcount:%s" % wordcount

 

[root@localhost ~]# catexample.txt

Nice to meet you

Today is a sunny.

 

执行结果

[root@localhost ~]# catexample.txt  | python pipe.py

Wordcount: 8

 

注:split是字符串处理的一种方法,把字符串转换成列表的格式

>>> a = 'nice tomeet you'

>>> a.split()

split默认的分隔符是空格, 可以进行自定义

>>> b.split('/')

['', 'usr', 'bin','python']

 

3.2.5 在文件的指定位置进行写操作

python中通过seek方法可以定位到写的位置

>>> f =file('a.txt','w')

>>>f.write('0123456789')

>>> f.seek(5)                                                 #定位到第五个字节位

>>>f.write('Hello,World!')

>>> f.flush()

>>> f.close()

>>> f =file('a.txt','r')

>>> f.read()

'01234Hello,World!'

 

tell方法返回当前文件的位置

>>> f =file('a.txt','r')

>>> f.read(3)

'012'

>>> f.read(2)

'34'

>>> f.tell()

5

 

注:Python中函数有很多,不会使用时要学会使用help进行查询

>>> help(file.tell)

Help on method_descriptor:

 

tell(...)

tell() -> current file position, an integer (may be along integer).

 

3.2.6 文件内容替换

语法格式

for   line in    fileinput.input(“filepath”,inplace=1)

       line = line.replace(“oldtext”,”newtext”)

       print line

 

例:

[root@localhost ~]# viminput.py

#!/usr/bin/env  python

import fileinput

for line infileinput.input('a.txt',backup='bak',inplace=1):

        line = line.replace('world','Python')

        print line

fileinput.close()

 

执行脚本之后查看a.txt

[root@localhost ~]# cata.txt

Hello,Python!

 

而且在当前目录下生成bak结尾的文件

 

inplace=1:标准输出会被重定向到打开文件;backup='bak',:替换文件内容之前备份后缀以bak结尾

 

3.2.7 修改文件内容

[root@localhost ~]# vimwith.py

#!/usr/bin/env python

with open('a.txt','r+') as f:

        old = f.read()

        f.seek(13)

        f.write('new line\n' + old)

 

查看文件内容

[root@localhost ~]# cata.txt

Hello,Python!new line

Hello,Python!

 

3.3          列表的基本使用

列表是Python的6种内建序列(还有元组,字符串,Unicode字符串,buffer对象,xrange对象)之一,列表内的值可以进行更改,操作灵活,在Python脚本中应用非常广泛

列表的语法格式

[ ‘元素1’,‘元素2’,‘元素3’,……,‘元素n’]

 

在需要操作一组数值的时候,序列很好用。可以通过序列表示数据库中一个人的信息——第一个元素是姓名,第二个元素是年龄。根据上述内容编写一个列表

>>> zhangsan =['zhangsan',18]

>>> lisi =['lisi',19]

>>>database=[zhangsan,lisi]

>>> database

[['zhangsan', 18],['lisi', 19]]

 

3.3.1 索引

序列中的所有元素都是有编号的,从0开始递增。这些元素可以通过编号分别访问

>>> company ='xuegod'

>>> company[0]

'x'

 

所有序列都可以通过这种方式进行索引,使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。最后一个元素的位置编号是-1(不是-0,避免和第一个元素重合)

>>> company[-1]

'd'

 

字符串可以直接进行索引,不需要通过变量进行引用

>>> 'hello'[1]

'e'

 

可以直接对函数调用的返回结果进行索引

>>> ready =raw_input('Are you ready?(yes or no)')[0]

Are you ready?(yes or no)yes

>>> ready

'y'

 

实战:编写一个代码程序,根据用户输入打印出时间日期

 

#!/usr/bin/python

#According to the given date(date) (month) (year) in the form of digital print out

months = [

'January',

'February',

'March',

'April',

'May',

'June',

'July',

'August',

'September',

'October',

'November',

'December',

]

#With 1 ~ 31 number as the endof the list

endings = ['st','nd','rd'] +17 * ['th'] \

+ ['st','nd','rd'] + 7 *['th'] \

+ ['st']

year = raw_input('Year:')

month = raw_input('Month(1-12):')

day = raw_input('Day (1-31):')

month_number = int(month)

day_number = int(day)

 

#To months and days minus 1,in order to obtain the correct index

month_name =months[month_number-1]

ordinal = day +endings[day_number-1]

print "%s %s,%s"  % (month_name,ordinal,year)

 

 

作业:

实战:创建一个商品页面,要求

1、显示商品名称和价格对应关系

2、获取用户工资水平

3、提供用户选择购买商品功能

4、用户购买完商品,显示用户账号余额

5、提示用户是否继续购买

 

 

脚本效果图

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: