selenium当前窗口,python中selenium使用
摘要
从Selenium模块化这篇文章可以看出参数化的必要性。本文介绍了读取外部txt文件的方法。
如何打开文件
以下两个函数可用于打开文件:
1、打开(文件名,访问模式)
File_name:文件路径和名称;
Access_mode:访问模式,具体参数如下。如果没有提供参数,默认值为R:
r:表示已读;
w:表示书写;
答:表示添加;
:表示读写;
b:表示二进制访问;
2.文件功能
file()的内置函数等于open(),根据文档如下:
帮助(打开)
打开(.)
open(名称[,模式[,缓冲]]) -file对象
使用file()类型打开一个文件,返回一个file对象。这是
打开文件的首选方式。参见文件。__doc__了解更多信息。(完)
阅读英文文本
接下来介绍读取txt文件内容的方法。Python提供了几种读取文件的方法,如下所示;
Read()读取整个文件
Readlines()逐行读取整个文件。
Readeline()逐行读取。
假设现在读取的txt文件存储了用户登录名和密码的测试数据,内容如下:
管理员,管理员
客人,客人
测试,测试
在这种情况下,更适合通过逐行读取来获取文件,如下例所示:
#编码:utf-8
importcodecsdefstr_reader_txt(地址):
fp=打开(地址,“r”)
用户=[]
残疾人=[]
lines=fp.readlines()用于数据内联:
name,pwd=data.split(,)
name=name.strip(\t\r\n )
pwd=pwd.strip(\t\r\n )
users.append(名称)
pwds . append(pwd)print user:% s(len(% d)) %(name,len(name))print pwd:% s(len(% d)) %(pwd,len(pwd))returnusers,PWDs
fp.close()
上面提到的Readlines()逐行读取txt文件的内容,使用split()函数切割字符串,分别获得用户名和密码。需要注意的是,读出的字符有最后一个回车,所以需要strip函数来过滤。
阅读中文文本
但在实际测试过程中,可能需要输入中文用户和密码。测试能通过吗?修改后的测试文档txt的用户名为中文,内容如下:
管理员,管理
客人,客人
测试人员,测试
执行上述脚本后,结果如下:
可以看到,上面的脚本在处理汉字时遇到了异常,汉字显示乱码。这里有两种解决方案:
方法一
#编码:utf-8
importcodecsdefstr_reader_txt(地址):
fp=打开(地址,“r”)
用户=[]
残疾人=[]
lines=FP . readlines()for data inlines:print type(data)
Data=data.decode(gb18030)#处理中文编码问题
打印类型(数据)
name,pwd=data.split(,)
name=name.strip(\t\r\n )
pwd=pwd.strip(\t\r\n )
users.append(名称)
pwds . append(pwd)print user:% s(len(% d)) %(name,len(name))print pwd:% s(len(% d)) %(pwd,len(pwd))returnusers,PWDs
fp.close()
方法是先解码代码( gb18030 )再划分内容,然后正常显示。结果如下。
原因描述
python里一般都是指Unicode,比如哈哈的unicode对象就是u\u54c8\u54c8
另一方面,Str是一个字节数组。这个字节数组表示unicode对象编码后的存储格式(utf-8、gbk、cp936、GB2312)。在这里只是一个字节流,没有别的意思。如果想让这个字节流中显示的内容有意义,就必须使用正确的编码格式进行解码和显示。
在上面的脚本操作中,type(data)用于打印解码前后数据的数据格式,如下所示:
可以看出,当内置的open()方法打开一个文件时,read()读取str格式:
Read()读取时,如果参数是str(且内容包含中文),读取后需要使用正确的编码格式解码(),转换成unicode字符后才能正确显示。
在写write()时,如果参数是unicode,就需要用要写的代码来编码()。如果是其他编码格式的str,就需要先用这个str的代码来编码(),转换成unicode后再用写好的代码来编码()。
方法2(推荐)
文件打开后可以直接读取gb18030格式,然后就可以直接操作了。另外,这种方法对中英文txt都适用。
#编码:utf-8
importcodecsdefstr_reader_txt(地址):
fp=codecs.open(地址, r , gb18030)#fp=open(地址, r )
用户=[]
残疾人=[]
lines=fp.readlines()用于数据内联:
name,pwd=data.split(,)
name=name.strip(\t\r\n )
pwd=pwd.strip(\t\r\n )
users.append(名称)
pwds . append(pwd)print user:% s(len(% d)) %(name,len(name))print pwd:% s(len(% d)) %(pwd,len(pwd))returnusers,PWDs
fp.close()
备注:Codecs.getreader也可以达到同样的效果,如下:
#编码:utf-8
importcodecsdefstr _ reader _ txt _ CSV(地址):
f=文件(地址,“rb”)
用户=[]
残疾人=[]
CSV=codecs . getreader( GB 18030 )(f)# codecs . getreaderf方法
对于数据增量:
name,pwd=data.split(,)
name=name.strip(\t\r\n )
pwd=pwd.strip(\t\r\n )
users.append(名称)
pwds.append(pwd)returnusers,pwds
f.close()
原因描述
编解码器模块提供了一个open()方法,它可以指定一个代码来打开一个文件。用这种方法打开的文件将返回unicode。
写的时候,如果参数是unicode,就用open()中指定的代码进行编码,然后再写;
如果是str,先按照源代码文件中声明的字符编码解码成unicode,然后再做上面的操作。对于内置的open(),这种方法不容易出现编码问题,推荐使用。
为什么要使用gb18030的编码格式?
以下是对比试验的结果,显示了使用gb18030和UTF-8的操作结果:
在windows平台下,默认的文档保存方式是ANSI,在简体中文系统下,ANSI码代表GB2312码。
保存txt时,将保存格式修改为UTF-8时,可以使用UTF-8编码打开,但字符长度不同。原因如下:
需要提到的是BOM(字节顺序标记)。当我们保存一个文件时,文件中使用的代码并没有被保存,但是当我们打开它时,我们需要记住原来保存时使用的代码,并用这个代码打开它,这就造成了很多麻烦。
所以记事本没有让你在打开文件的时候选择代码?你不妨在使用文件之前打开记事本——打开一个以UTF-8编码格式保存的txt文档。
UTF引入了BOM来表示自己的代码。如果读入的前几个字节是其中之一,那么用来表示接下来要读取的文本的代码就是相应的代码:
BOM_UTF8 \xef\xbb\xbf
BOM_UTF16_LE \xff\xfe
BOM_UTF16_BE \xfe\xff
当有BOM时,你如何获得UTF-8文件的内容?有一种方法是编解码器。可以参考的Codec中的BOM_UTF8,这里就不详细解释了。
GB2312、GBK和GB18030的区别与联系
这里有一个参考链接,http://www.zhihu.com/question/19677619.
这篇文章的描述比较全面清晰,可以概括为:
GBK完全兼容GB2312。
GB 18030完全兼容GB 2312,基本兼容GBK,支持GB 13000和Unicode的全部统一汉字,共70244个汉字。
GB 18030,全称:国家标准GB 18030-2005 《信息技术中文编码字符集》,是中华人民共和国(PRC)最新的内码字集,是GB 18030-2000 《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版。
中文处理流程概述
处理中文数据时,最好采用以下方法:
1.尽早解码(尽快解码,并在进一步处理之前将文件内容转换为unicode)
2.unicode无处不在(Unicode用于程序的内部处理)
3.稍后编码(最终编码回所需的编码,比如将最终结果写入结果文件)
有几点需要说明:
*所谓"正确的"编码意味着指定的编码和字符串本身的编码必须一致。其实这个不是那么好判断的。一般来说,我们直接输入的简体中文字符有两种可能的编码:GB2312(GBK,GB18030)和UTF-8。
* GB2312、GBK和GB18030实质上是相同的编码标准。只是在前者的基础上扩大了字符数。
* UTF-8和GB编码不兼容
*第二步,在将str转换为unicode对象时,可以使用以下两种方法:这两种方法都是将gb2312中编码的str转换为unicode编码。
unicode(字符串,“gb2312”)
字符串解码( gb2312 )
*另外,在定义字符串时,用str=u 汉字来定义汉字。
参考数据
深入分析中文Python乱码
详细讲解python中文编码和处理
http://blog.csdn.net/lxdcyh/article/details/4018054
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。