发布于 2014-10-30 07:13:27 | 9569 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Python教程,程序狗速度看过来!

Python编程语言

Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。


本文是一个python实现的把txt文件转换为JSON格式输出示例代码,感兴趣的同学参考下。

示例代码

简单的1-10存一个文件, A-J 存一个文件

import json  
 
book = 'C:\Python27\\book.txt'  
date = 'C:\Python27\date.txt'  
book_list = []  
date_list = []  
 
with open(book) as b:  
    book_list = b.read().splitlines()  
 
with open(date) as d:  
    date_list = d.read().splitlines()  
 
data = dict(zip(book_list, date_list))  
print type(data)  
print data  
j = json.dumps(data)  
print type(j)  
print j

 


很简单的先从本地中读取文件,然后用with关键词配合open方法打开文件。读取文件的时候忽略'\n',不然会在最终结果出现一对'\n':‘\n’。

with open(fname) as f:  
    content = f.readlines()

会得到'\n'

with open(fname) as f:  
    content = f.read().splitlines()

不会得到'\n'
 

然后我们将两个list用zip方法组合,转换为dict字典类型,再用json.dumps方法转换为JSON格式输出。

<type 'dict'>  
{'A': '1', 'C': '3', 'B': '2', 'E': '5', 'D': '4', 'G': '7', 'F': '6', 'I': '9', 'H': '8', 'J': '10'}  
<type 'str'>  
{"A": "1", "C": "3", "B": "2", "E": "5", "D": "4", "G": "7", "F": "6", "I": "9", "H": "8", "J": "10"}

zip()

首先我们看help(zip)

zip(...)  
    zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]  
      
    Return a list of tuples, where each tuple contains the i-th element  
    from each of the argument sequences.  The returned list is truncated  
    in length to the length of the shortest argument sequence.

  1.  


zip接受一系列可迭代对象作为参数,讲对象中对应的元素打包成一个个tuple,然后返回由这些tuples组成的list。P.S. 如果传入的参数不等长,那么返回的list的长度和参数中长度最短的对象相同。

z1=[1,2,3]  
z2=[4,5,6]  
result = zip(z1,z2)  
print result  
z3=[4,5,6,7]  
result = zip(z1,z3)  
print result  
result = zip(*result)  
print result  
 
# result  
 
[(1, 4), (2, 5), (3, 6)]  
[(1, 4), (2, 5), (3, 6)]  
[(1, 2, 3), (4, 5, 6)]

 


配合*星号操作符,我们可以把zip的列表再解压,把初始的两个list还原出来以tuple形式展现。

高级应用例子

二维矩阵行列变换

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

print [[row[col] for row in a] for col in range(len(a[0]))]  
 
# result  
 
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]


或者利用zip配合map可以达到同样的效果

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
 
print zip(*a)  
print map(list,zip(*a))  
 
# result  
 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]  
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]


使用zip反转字典

m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}  
 
print m.items()  
print zip(m.values(), m.keys())  
 
mi = dict(zip(m.values(), m.keys()))  
print m  
print mi  
 
# result  
 
[('a', 1), ('c', 3), ('b', 2), ('d', 4)]  
[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]  
{'a': 1, 'c': 3, 'b': 2, 'd': 4}  
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

 

with statement

with的实质是一个控制流语句,可以用来简化try-finally语句。主要功能是实现一个类__enter__()和__exit__()方法

class controlled_execution:  
    def _enter__(self):  
        set things up  
        return thing  
    def __exit__(self, type, value,  traceback):  
        tear thing down  
with controlled_execution() as thing:  
    some code


在实际的运行过程中,首先运行enter里面的代码,返回thing,作为as之后的变量值,然后再与运行with模块中的代码,最后会自动执行exit中的代码,不论with中的代码运行结果如何。

这样也就简化了try-finally语句。同样用在读取文件的操作中,将文件的关闭操作放在exit方法中,就不会忘记释放文件而出现错误。

P.S. exit方法的返回值可以用来指示with部分的代码出现的异常是否需要raise,如果返回false,则会raise,否则,不进行操作。

 

此外,python库中有contextlib模块,使你不用构造含有__enter__和__exit__方法的类就可以使用with

>>> from contextlib import contextmanager    
>>> from __future__ import with_statement    
>>> @contextmanager    
... def context():    
...     print 'entering the zone'    
...     try:    
...         yield    
...     except Exception, e:    
...         print 'with an error %s'%e    
...         raise e    
...     else:    
...         print 'with no error'    
...    
>>> with context():    
...     print '----in context call------'    
...    
entering the zone    
----in context call------    
with no error

 


from contextlib import closing    
import urllib    
    
with closing(urllib.urlopen('http://www.python.org')) as page:    
    for line in page:    
        print line

P.S. 在一个with后面,你可以open多个文件,比如

def filter(txt, oldfile, newfile):  
    '''''\
    Read a list of names from a file line by line into an output file.
    If a line begins with a particular name, insert a string of text
    after the name before appending the line to the output file.
    '''  
 
    with open(newfile, 'w') as outfile, open(oldfile, 'r', encoding='utf-8') as infile:  
        for line in infile:  
            if line.startswith(txt):  
                line = line[0:len(txt)] + ' - Truly a great person!\n'  
            outfile.write(line)  
 
# input the name you want to check against  
text = input('Please enter the name of a great person: ')      
letsgo = filter(text,'Spanish', 'Spanish2')


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务