Ⅰ 您好,我刚开始学python,请问您的这段代码表示什么意思呢
cptt = re.compile(r'[^\x00-\xff]') # 准备(编译)好一个正则表达式: 汉字
print'\n'.join([ # 用换行符拼接数据并打印
a.text.encode('gbk') # 将a的text属性按gbk格式编码
for a in BeautifulSoup(content).findAll('td') # 用BeautifulSoup解析content,
# a是其中的每一个查到的td
if cptt.match(a.text) # 如果a的text属性与准备好的正则表达式相匹配
])
Ⅱ python怎么打开文件模式
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
读文件
要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
>>> f = open('/Users/michael/test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
>>> f.read()'Hello, world!'
最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
>>> f.close()
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
try:
f = open('/path/to/file', 'r')
print(f.read())finally: if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())
这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
file-like Object
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。
StringIO就是在内存中创建的file-like Object,常用作临时缓冲。
二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb')>>> f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
字符编码
要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')>>> f.read()'测试'
遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
>>> f = open('/Users/michael/test.txt', 'w')>>> f.write('Hello, world!')>>> f.close()
你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码。
细心的童鞋会发现,以'w'模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入'a'以追加(append)模式写入。
所有模式的定义及含义可以参考Python的官方文档。
Ⅲ python寻找特定字符附近的内容并输出
正则表达式:[^\x00-\xff]|\d+[^\x00-\xff]
Ⅳ python判断图像是不是gif
用扩展名判断文件格式非常简单,但是有可能是错误的。 jpeg文件有固定的文件头,其文件头的格式如下:
Start Marker | JFIF Marker | Header Length | Identifier0xff, 0xd8 | 0xff, 0xe0 | 2-bytes | "JFIF\0"
所以我们可以通过文件头的方式快速判断文件格式:
def is_jpg(filename):
data = open(filename,'rb').read(11)
if data[:4] != '\xff\xd8\xff\xe0': return False
if data[6:] != 'JFIF\0': return False
return True
上面的方式通过文件的前x个字节对文件格式做了判断,如果我们的要求更高,可以通过PIL类库来做判断。
from PIL import Imagedef is_jpg(filename):
try:
i=Image.open(filename)
return i.format =='JPEG'
except IOError:
return False
Ⅳ python判断 纯ASCII字符串 怎么做
如果要判断某路径是否包换中文,可以用正则表达式判断是否含有双字节字符
>>> import re
>>> re.search(r'[^\x00-\xff]',u'asasd你好asdf')
<_sre.SRE_Match object at 0x349019f8>
>>> re.search(r'[^\x00-\xff]',u'asasd2323)(*#(&93asdf')
如果字符串含有中文的话re.search(r'[^\x00-\xff]', str)就会有返回匹配结果,否则当字符串都是单字节的ASCII字符串的话,就会返回None,注意字符串需要为unicode编码
Ⅵ python 编码转换
f.decode('utf-16').encode('gbk')
Ⅶ python解码问题
你好:
Python的解码是decode;
编码是encode;
你可以将这个字符串:encode("gbk"),试一下。
Ⅷ 求看python 统计中文词频的代码,有一个地方不懂 求大神
首先要说明一个概念:gbk编码里一个中文字符的‘长度’是2。
str='中国'#gbk编码
要取得'中'这个字符,需要用分片str[0:2],而不是索引str[0]。
以z4为例,下面这些代码的效果是这样的。
x='同舟共济与时俱进艰苦奋斗'
i+=z4.findall(x)#返回['同舟共济','与时俱进','艰苦奋斗']
i+=z4.findall(x[2:])#返回['舟共济与','时俱进艰']
i+=z4.findall(x[4:])#返回['共济与时','俱进艰苦']
i+=z4.findall(x[6:])#返回['济与时俱','进艰苦奋']
目的是取得所有连续4字中文字符串。
Ⅸ Python中的不同进制的语法和转换
不同进制的书写方式
八进制(Octal) 0o377
十六进制(Hex) 0xFF
二进制(Binary) 0b11111111
不同进制之间的转换
Python提供了三个内置的函数,可以用来在不同进制间做转换。
>>> oct(255), hex(255), bin(255)
('0o377', '0xff', '0b11111111')
还可以使用int函数,把字符串转成数值
>>> int('255'), int('0xFF', 16)
(255, 255)
除此之外还可以使用eval,功能类似于int函数,但是它的参数是python代码。
>>> eval('255'), eval('0xFF')
(255, 255)
当然也可使用字符串的格式化输出
>>> '{0:0}, {1:x}, {2:b}'.format(255, 255, 255)
'255, ff, 11111111'
>>> '%o, %x, %X' % (255, 255, 255)
'377, ff, FF'
Ⅹ 在python中怎么实现goto功能
1、首先点击输入下方的代码:
from goto import *
@patch
def f2():
goto(10)
(10)pythonxff扩展阅读:
用法是:
1、from goto import *。注意暂时不支持import goto,
2、对需要使用goto的函数,前面加个@patch
3、用label(x)和goto(x)的形式写label和goto。x可以是数字或字符串。
goto模块的代码如下:
goto.py