ECDFs stat Empirical cumulative distribution functions

In this exercise, you will write a function that takes as input a 1D array of data and then returns the x and y values of the ECDF.  ECDFs are among the most important plots in statistical analysis. You can write your own function, foo(x,y) according to the following skeleton:

def foo(a,b):
    """State what function does here"""
    # Computation performed here
    return x, y

The function foo() above takes two arguments a and b and returns two values x and y. The function header def foo(a,b): contains the function signaturefoo(a,b), which consists of the function name, along with its parameters.

 

Define a function with the signature ecdf(data). Within the function definition,

  • Compute the number of data points, n, using the len() function.
  • The xx-values are the sorted data. Use the np.sort() function to perform the sorting.
  • The yy data of the ECDF go from 1/n to 1 in equally spaced increments. You can construct this using np.arange() and then dividing by n.
  • The function returns the values x and y.

 

def ecdf(data):
    """Compute ECDF for a one-dimensional array of measurements."""

    # Number of data points: n
    n=len(data)

    # x-data for the ECDF: x
    x=np.sort(data)

    # y-data for the ECDF: y
    y=np.arange(1,n+1)/n

    return x, y

 

30 days of code https://www.hackerrank.com

Day 6

 

Task
Given a string,S , of length N  that is indexed from 0 to N-1, print its even-indexed and odd-indexed characters as 2 space-separated strings on a single line (see the Sample below for more detail).

Note: is considered to be an even index.

Sample Input

2
Hacker
Rank

Sample Output

Hce akr
Rn ak

My code

# Enter your code here. Read input from STDIN. Print output to STDOUT
x=int(raw_input())



for i in range(x):
    d=raw_input()
    a='';b=''
    for i in range(0,len(d),2):
        a+=d[i]
    print a,
    
    for i in range(1,len(d),2):
        b+=d[i]
    print b,

    print ''

official answer:

t = int(raw_input())
for _ in range(t):
    line = raw_input()
    first = ""
    second = ""

    for i, c in enumerate(line):
        if (i & 1) == 0:
            first += c
        else:
            second += c
    print first, second

Day 8

Sample Input

3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry

Sample Output

sam=99912222
Not found
harry=12299933

my answer

# Enter your code here. Read input from STDIN. Print output to STDOUT
x=raw_input()
y={}
for i in range(int(x)):
    k=raw_input()
    y[k.split(' ')[0]]=k.split(' ')[-1]
    

while True:
    try:
        c=raw_input()
    except:
        c=0
    if c:
        try:
            print c+'='+y[c]
        except:
            print 'Not found'
    else:
        break

official

Python3
import sys 

# Read input and assemble Phone Book
n = int(input())
phoneBook = {}
for i in range(n):
    contact = input().split(' ')
    phoneBook[contact[0]] = contact[1]

# Process Queries
lines = sys.stdin.readlines()
for i in lines:
    name = i.strip()
    if name in phoneBook:
        print(name + '=' + str( phoneBook[name] ))
    else:
        print('Not found')

Day 12: Inheritance

class Person:
	def __init__(self, firstName, lastName, idNumber):
		self.firstName = firstName
		self.lastName = lastName
		self.idNumber = idNumber
	def printPerson(self):
		print "Name:", self.lastName + ",", self.firstName
		print "ID:", self.idNumber



class Student(Person):
    def __init__(self, firstName, lastName, idNum ,scores):
        Person.__init__(self, firstName, lastName, idNum)
        self.scores=scores

    def calculate(self):
        avg = sum(scores) / len(scores)
        grade = ''
        if (90 <= avg <= 100):
            grade = 'O'
        if (80 <= avg < 90):
            grade = 'E'
        if (70 <= avg < 80):
            grade = 'A'
        if (55 <= avg < 70):
            grade = 'P'
        if (40 <= avg <= 55):
            grade = 'D'            
        if (avg < 40):
            grade = 'T'        
        
        return grade
        

line = raw_input().split()
firstName = line[0]
lastName = line[1]
idNum = line[2]
numScores = int(raw_input()) # not needed for Python
scores = map(int, raw_input().split())
s = Student(firstName, lastName, idNum, scores)
s.printPerson()
print "Grade:", s.calculate()

Day 14: Scope

The absolute difference between two integers

class Difference:
    def __init__(self, a):
        self.__elements = a

	# Add your code here
    def computeDifference(self):
        self.maximumDifference = max([a-b for a in self.__elements for b in self.__elements])


# End of Difference class

_ = raw_input()
a = [int(e) for e in raw_input().split(' ')]

d = Difference(a)
d.computeDifference()

print d.maximumDifference

Day 15: Linked List

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None
class Solution:
    def display(self,head):
        current = head
        while current:
            print current.data,
            current = current.next	


    def insert(self,head,data):
        if (head == None):
            head = Node(data)
        else:
            current = head
            while True:
                if(current.next == None):
                    current.next = Node(data)
                    break
                current = current.next
        return head


mylist= Solution()
T=int(input())
head=None
for i in range(T):
    data=int(input())
    head=mylist.insert(head,data)    
mylist.display(head);

 

coding in Python

1.Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?

def unique(string):
    # Assuming character set is ASCII (128 characters)
    if len(string) > 128:
        return False

    char_set = [False for _ in range(128)]
    for char in string:
        val = ord(char)
        if char_set[val]:
            # Char already found in string
            return False
        char_set[val] = True

    return True

2.Check palindrome

def is_palindrome(n):  
    n=str(n)  
    m=n[::-1]  
    return n==m

3. Fibonacci

a,b = 0, 1
while b<100:
    print (b),
    a, b = b, a+b

4. how do I iterate over a sequence in reverse order

for x in reversed(sequence):
    ... # do something with x..


for i in range(len(sequence)-1, -1, -1):
    x = sequence[i]
    <do something with x>

5.Python是如何进行类型转换的?

函数                      描述
int(x [,base ])         将x转换为一个整数
long(x [,base ])        将x转换为一个长整数
float(x )               将x转换到一个浮点数
complex(real [,imag ])  创建一个复数
str(x )                 将对象 x 转换为字符串
repr(x )                将对象 x 转换为表达式字符串
eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s )               将序列 s 转换为一个元组
list(s )                将序列 s 转换为一个列表
chr(x )                 将一个整数转换为一个字符
unichr(x )              将一个整数转换为Unicode字符
ord(x )                 将一个字符转换为它的整数值
hex(x )                 将一个整数转换为一个十六进制字符串
oct(x )                 将一个整数转换为一个八进制字符串

6. 请写出一段Python代码实现删除一个list里面的重复元素

l = [1,1,2,3,4,5,4]
list(set(l))
[1, 2, 3, 4, 5]

d = {}
for x in mylist:
    d[x] = 1
mylist = list(d.keys())

7.介绍一下Python中webbrowser的用法?

webbrowser模块提供了一个高级接口来显示基于Web的文档,大部分情况下只需要简单的调用open()方法。
webbrowser定义了如下的异常:
exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常
webbrowser有以下方法:
webbrowser.open(url[, new=0[, autoraise=1]])
这个方法是在默认的浏览器中显示url, 如果new = 0, 那么url会在同一个浏览器窗口下打开,如果new = 1, 会打开一个新的窗口,如果new = 2, 会打开一个新的tab, 如果autoraise = true, 窗口会自动增长。
webbrowser.open_new(url)
在默认浏览器中打开一个新的窗口来显示url, 否则,在仅有的浏览器窗口中打开url
webbrowser.open_new_tab(url)
在默认浏览器中当开一个新的tab来显示url, 否则跟open_new()一样
webbrowser.get([name]) 根据name返回一个浏览器对象,如果name为空,则返回默认的浏览器
webbrowser.register(name, construtor[, instance])
注册一个名字为name的浏览器,如果这个浏览器类型被注册就可以用get()方法来获取。

 

8. (1)python下多线程的限制以及多进程中传递参数的方式
python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。
多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array

(2)python多线程与多进程的区别

  • 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie)。所以,有必要对每个Process对象调用join()方法 (实际上等同于wait)。对于多线程来说,由于只有一个进程,所以不存在此必要性。
  • 多进程应该避免共享资源。在多线程中,我们可以比较容易地共享资源,比如使用全局变量或者传递参数。在多进程情况下,由于每个进程有自己独立的内存空间,以上方法并不合适。此时我们可以通过共享内存和Manager的方法来共享资源。但这样做提高了程序的复杂度,并因为同步的需要而降低了程序的效率。

 

9.Python是如何进行内存管理的?
http://developer.51cto.com/art/201007/213585.htm
Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于管理对小块内存的申请和释放
内存池(memory pool)的概念:
当 创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低。内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。
内存池的实现方式有很多,性能和适用范围也不一样。
python中的内存管理机制——Pymalloc:
python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256bits时,pymalloc会在内存池中申请内存空间;当大于256bits,则会直接执行new/malloc的行为来申请内存空间。
关于释放内存方面,当一个对象的引用计数变为0时,python就会调用它的析构函数。在析构时,也采用了内存池机制,从内存池来的内存会被归还到内存池中,以避免频繁地释放动作。

 

 

10.什么是lambda函数?它有什么好处?
http://www.kuqin.com/diveinto_python_document/apihelper_lambda.html
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。 lambda 函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。

 

11.Python如何实现单例模式?其他23种设计模式python如何实现?

#使用__metaclass__(元类)的高级python用法  
class Singleton2(type):  
    def __init__(cls, name, bases, dict):  
        super(Singleton2, cls).__init__(name, bases, dict)  
        cls._instance = None  
    def __call__(cls, *args, **kw):  
        if cls._instance is None:  
            cls._instance = super(Singleton2, cls).__call__(*args, **kw)  
        return cls._instance  
 
class MyClass3(object):  
    __metaclass__ = Singleton2  
 
one = MyClass3()  
two = MyClass3()  
 
two.a = 3  
print one.a  
#3  
print id(one)  
#31495472  
print id(two)  
#31495472  
print one == two  
#True  
print one is two  
#True

12.Python里面如何拷贝一个对象?
http://blog.csdn.net/sharkw/article/details/1934090
标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象.
使用deepcopy方法,对象中的属性也被复制

13.介绍一下except的用法和作用?
Python的except用来捕获所有异常,因为Python里面的每次错误都会抛出一个异常,所以每个程序的错误都被当作一个运行时错误。

14.Python中pass语句的作用是什么?
pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作

15.如何知道一个python对象的类型?
type()

16.介绍一下Python下range()函数的用法?
http://docs.python.org/library/functions.html#range
range(start, stop[, step])

 

17.如何用Python来进行查询和替换一个文本字符串?
可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])
replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数,指最大被替换的数量

 

18.Python里面search()和match()的区别?
match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none

19.用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
前者是贪婪匹配,会从头到尾匹配 <a>xyz</a>,而后者是非贪婪匹配,只匹配到第一个 >。

20.Python里面如何生成随机数?
import random
random.random()
它会返回一个随机的0和1之间的浮点数

 

21.如何用Python来发送邮件?

python实现发送和接收邮件功能主要用到poplib和smtplib模块。

poplib用于接收邮件,而smtplib负责发送邮件。

#! /usr/bin/env python
#coding=utf-8
import sys 
import time 
import poplib 
import smtplib 
#邮件发送函数
def send_mail(): 
     try: 
        handle = smtplib.SMTP('smtp.126.com',25) 
        handle.login('XXXX@126.com','**********') 
        msg = 'To: XXXX@qq.com\r\nFrom:XXXX@126.com\r\nSubject:hello\r\n'
        handle.sendmail('XXXX@126.com','XXXX@qq.com',msg) 
        handle.close() 
        return 1
    except: 
        return 0
#邮件接收函数
def accpet_mail(): 
    try: 
        p=poplib.POP3('pop.126.com') 
        p.user('pythontab@126.com') 
        p.pass_('**********') 
        ret = p.stat() #返回一个元组:(邮件数,邮件尺寸) 
       #p.retr('邮件号码')方法返回一个元组:(状态信息,邮件,邮件尺寸)   
    except poplib.error_proto,e: 
        print "Login failed:",e 
        sys.exit(1)
    
#运行当前文件时,执行sendmail和accpet_mail函数
if __name__ == "__main__": 
    send_mail() 
    accpet_mail()

 

 22.Python如何定义一个函数?
定义函数的格式是: def functionName(arg):23.有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
pycheck pylint24.如何在一个function里面设置一个全局的变量?
global25.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
1. 分别计算a,b序列的和;
2. 求a序列和与b序列和的差值的一半,记为half;
3. 在和值大的序列中找出一个与和值小的序列中的元素max的差值最接近half的元素,记为min;
4. 将max与min互换即可。

26.如何用Python删除一个文件?
使用os.remove(filename)或者os.unlink(filename);27.Python如何copy一个文件?
shutil模块有一个copyfile函数可以实现文件拷贝28.python程序中文输出问题怎么解决?
用encode和decode
如:
import os.path
import xlrd,sys

Filename=’/home/tom/Desktop/1234.xls’
if not os.path.isfile(Filename):
    raise NameError,”%s is not a valid filename”%Filename

bk=xlrd.open_workbook(Filename)
shxrange=range(bk.nsheets)
print shxrange

for x in shxrange:
    p=bk.sheets()[x].name.encode(‘utf-8′)
    print p.decode(‘utf-8′)

方法二:
在文件开头加上

1 reload(sys)
2 sys.setdefaultencoding(‘utf8′)

29.python代码得到列表list的交集与差集

交集

1 b1=[1,2,3]
2 b2=[2,3,4]
3 b3 = [val for val in b1 if val in b2]
4 print b3

差集

1 b1=[1,2,3]
2 b2=[2,3,4]
3 b3 = [val for val in b1 if val not in b2]
4 print b3

 

 

30.写一个简单的python socket编程
python 编写server的步骤:
1.
第一步是创建socket对象。调用socket构造函数。如:

socket = socket.socket( family, type )

family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
2.
第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:

socket.bind( address )

由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
3.
第三步是使用socket套接字的listen方法接收连接请求。

socket.listen( backlog )

backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
4.
第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。

connection, address = socket.accept()

调用accept方法时,socket会进入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
5.

第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
6. 传输结束,服务器调用socket的close方法关闭连接。

python编写client的步骤:
1. 创建一个socket以连接服务器:socket = socket.socket( family, type )
2.使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:

socket.connect( (host,port) )

host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
3. 处理阶段,客户和服务器将通过send方法和recv方法通信。
4. 传输结束,客户通过调用socket的close方法关闭连接。

下面给个简单的例子:

server.py

#coding:utf-8

import socket
if __name__ == '__main__':
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 8001))
    sock.listen(5)

    while True:
        connection,address = sock.accept()
        try:
            connection.settimeout(5)
            buf = connection.recv(1024)
            if buf == '1':
                connection.send('welcome to server!')
            else:
                connection.send('please go out!')
        except socket.timeout:
            print 'time out'

        connection.close()

client.py

#coding:utf-8

import socket
import time

if __name__ == '__main__':
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8001))
    time.sleep(2)
    sock.send('1')
    print sock.recv(1024)
    sock.close()

在终端运行server.py,然后运行clien.py,会在终端打印“welcome to server!”。

31.python如何捕获异常
(1)使用try和except语句来捕获异常

try:  
       block  
    except [exception,[data…]]:  
       block  
     
    try:  
    block  
    except [exception,[data...]]:  
       block  
    else:  
       block

捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该python 异常处理的except代码块捕获所有的异常

(2)用raise语句手工引发一个异常:

raise [exception[,data]]  
     
    try:  
        raise MyError #自己抛出一个异常  
    except MyError:  
        print 'a error'  
     
    raise ValueError,’invalid argument’

(3)采用sys模块回溯最后的异常

1     import sys  
2     try:  
3        block  
4     except:  
5        info=sys.exc_info()  
6        print info[0],":",info[1] 


32.src = “security/afafsff/?ip=123.4.56.78&id=45″,请写一段代码用正则匹配出ip

匹配ip地址的python正则表达式

pattern =
‘^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$’

故本题答案

1 >>> re.findall(r'([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])', src)
2 [('123', '4', '56', '78')]

33.写一段代码用json数据的处理方式获取{“persons”:[{“name”:”yu”,”age”:”23″},{“name”:”zhang”,”age”:”34″}]}这一段json中第一个人的名字。

json读取
>>> import json
>>> j = json.loads('{"persons":[{"name":"yu","age":"23"},{"name":"zhang","age":"34"}]}')
>>> print j
{u'persons': [{u'age': u'23', u'name': u'yu'}, {u'age': u'34', u'name': u'zhang'}]}
>>> print j.keys()
[u'persons']
>>> print j.values()
[[{u'age': u'23', u'name': u'yu'}, {u'age': u'34', u'name': u'zhang'}]]
>>> print j.values()[0]
[{u'age': u'23', u'name': u'yu'}, {u'age': u'34', u'name': u'zhang'}]
>>> print j.values()[0][0]
{u'age': u'23', u'name': u'yu'}
>>> print j.values()[0][0]['name']
yu

34.平衡点问题
平衡点:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点
要求:返回任何一个平衡点

使用sum函数累加所有的数。
使用一个变量fore来累加序列的前部。直到满足条件fore<(total-number)/2;
python代码如下:

numbers = [1,3,5,7,8,2,4,20]

#find total
total=sum(numbers)

#find num
fore=0
for number in numbers:
   if fore<(total-number)/2 :
      fore+=number
   else:
      break

#print answer
if fore == (total-number)/2 :
   print number
else :
   print r'not found'

算法简单,而且是O(n)的,12行代码搞定。参考http://blog.renren.com/share/235087438/3004327956

35.支配点问题:
支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配数,其所在位序成为支配点;比如int[] a = {3,3,1,2,3};3为支配数,0,1,4分别为支配点;
要求:返回任何一个支配点

li = [3,3,1,2,3]
def main():
     mid = len(li)/2
     for l in li:
         count = 0
         i = 0
         mark = 0
         while True:
             if l == li[i]:
                 count += 1
                 temp = i
             i += 1
             if count > mid:
                 mark = temp
                 return (mark,li[mark])
             if i > len(li) - 1:
                 break

if __name__ == "__main__":
    print  main()

36.什么是PEP 8

参考:http://www.python.org/dev/peps/pep-0008/

37.Python2.x和Python3.x的区别

从Python2到Python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了。

参考:http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html

Python odds and ends

 from sys import argv unpack argv

a,b,c…=argv

> python file.py ‘b’,’c’,…

argv will be a list contains

[‘file.py’, ‘a’,’b’,…]

a = python file name itself

b,c, …. is the variables pass when exec the python file

 The argument mode points to a string beginning with one of the following
 sequences (Additional characters may follow these sequences.):

 ``r''   Open text file for reading.  The stream is positioned at the
         beginning of the file.

 ``r+''  Open for reading and writing.  The stream is positioned at the
         beginning of the file.

 ``w''   Truncate file to zero length or create text file for writing.
         The stream is positioned at the beginning of the file.

 ``w+''  Open for reading and writing.  The file is created if it does not
         exist, otherwise it is truncated.  The stream is positioned at
         the beginning of the file.

 ``a''   Open for writing.  The file is created if it does not exist.  The
         stream is positioned at the end of the file.  Subsequent writes
         to the file will always end up at the then current end of file,
         irrespective of any intervening fseek(3) or similar.

 ``a+''  Open for reading and writing.  The file is created if it does not
         exist.  The stream is positioned at the end of the file.  Subse-
         quent writes to the file will always end up at the then current
         end of file, irrespective of any intervening fseek(3) or similar.
                  | r   r+   w   w+   a   a+
------------------|--------------------------
read              | +   +        +        +
write             |     +    +   +    +   +
create            |          +   +    +   +
truncate          |          +   +
position at start | +   +    +   +
position at end   |                   +   +

where meanings are: (just to avoid any misinterpretation)

  • read – reading from file is allowed
  • write – writing to file is allowed
  • create – file is created if it does not exist yet
  • trunctate – during opening of the file it is made empty (all content of the file is erased)
  • position at start – after file is opened, initial position is set to the start of the file
  • position at end – after file is opened, initial position is set to the end of the file
  • close — Closes the file. Like File->Save.. in your editor.
  • read — Reads the contents of the file. You can assign the result to a variable.
  • readline — Reads just one line of a text file.
  • truncate — Empties the file. Watch out if you care about the file.
  • write('stuff') — Writes “stuff” to the file.
 file manipulate manipulate.py:

from sys import argv

script, input_file = argv

current_file = open(input_file)

def print_all(f):
print f.read()

def rewind(f):
f.seek(0)

def print_a_line(line_count, f):
print line_count, f.readline()

 $ python manipulate.py test.txt

Why does seek(0) not set the current_line to 0?
First, the seek() function is dealing in bytes, not lines. The code seek(0) moves the file to the 0 byte (first byte) in the file. Second, current_line is just a variable and has no real connection to the file at all. We are manually incrementing it.

 

How does readline() know where each line is?
Inside readline() is code that scans each byte of the file until it finds a \n character, then stops reading the file to return what it found so far. The file f is responsible for maintaining the current position in the file after each readline() call, so that it will keep reading each line.

Excel shortcuts (Chinese) tips

 problemshortcut
0快捷键之在工作表中移动和滚动向上、下、左或右移动单元格箭头键
1移动到当前数据区域的边缘CTRL+ 箭头键
2移动到行首HOME
3移动到工作表的开头CTRL+HOME
4移动到工作表的最后一个单元格。CTRL+END
5向下移动一屏PAGE DOWN
6向上移动一屏PAGE UP
7向右移动一屏ALT+PAGE DOWN
8向左移动一屏ALT+PAGE UP
9移动到工作簿中下一个工作表CTRL+PAGE DOWN
10移动到工作簿中前一个工作表CTRL+PAGE UP
11移动到下一工作簿或窗口CTRL+F6 或 CTRL+TAB
12移动到前一工作簿或窗口CTRL+SHIFT+F6
13移动到已拆分工作簿中的下一个窗格F6
14移动到被拆分的工作簿中的上一个窗格SHIFT+F6
15滚动并显示活动单元格CTRL+BACKSPACE
16显示“定位”对话框F5
17显示“查找”对话框SHIFT+F5
18重复上一次“查找”操作SHIFT+F4
19在保护工作表中的非锁定单元格之间移动TAB
202>Excel快捷键之处于END模式时在工作表中移动
21打开或关闭 END 模式END
22在一行或列内以数据块为单位移动END, 箭头键
23移动到工作表的最后一个单元格.END, HOME
24在当前行中向右移动到最后一个非空白单元格。END, ENTER
253>Excel快捷键之处于“滚动锁定”模式时在工作表中移动
26打开或关闭滚动锁定SCROLL LOCK
27移动到窗口中左上角处的单元格HOME
28移动到窗口中右下角处的单元格END
29向上或向下滚动一行上箭头键或下箭头键
30向左或向右滚动一列左箭头键或右箭头键
314>Excel快捷键之用于预览和打印文档
32显示“打印”对话框CTRL+P
33在打印预览中时
34当放大显示时,在文档中移动箭头键
35当缩小显示时,在文档中每次滚动一页PAGE UP
36当缩小显示时,滚动到第一页CTRL+上箭头键
37当缩小显示时,滚动到最后一页CTRL+下箭头键
385>Excel快捷键之用于工作表、图表和宏
39插入新工作表SHIFT+F11
40创建使用当前区域的图表F11 或 ALT+F1
41显示“宏”对话框ALT+F8
42显示“Visual Basic 编辑器”ALT+F11
43插入 Microsoft Excel 4.0 宏工作表CTRL+F11
44移动到工作簿中的下一个工作表CTRL+PAGE DOWN
45移动到工作簿中的上一个工作表CTRL+PAGE UP
46选择工作簿中当前和下一个工作表SHIFT+CTRL+PAGE DOWN
47选择当前工作簿或上一个工作簿SHIFT+CTRL+PAGE UP
486>Excel快捷键之选择图表工作表
49选择工作簿中的下一张工作表CTRL+PAGE DOWN
50选择工作簿中的上一个工作表CTRL+PAGE UP,END, SHIFT+ENTER
517>Excel快捷键之用于在工作表中输入数据
52完成单元格输入并在选定区域中下移ENTER
53在单元格中折行ALT+ENTER
54用当前输入项填充选定的单元格区域CTRL+ENTER
55完成单元格输入并在选定区域中上移SHIFT+ENTER
56完成单元格输入并在选定区域中右移TAB
57完成单元格输入并在选定区域中左移SHIFT+TAB
58取消单元格输入ESC
59删除插入点左边的字符,或删除选定区域BACKSPACE
60删除插入点右边的字符,或删除选定区域DELETE
61删除插入点到行末的文本CTRL+DELETE
62向上下左右移动一个字符箭头键
63移到行首HOME
64重复最后一次操作F4 或 CTRL+Y
65编辑单元格批注SHIFT+F2
66由行或列标志创建名称CTRL+SHIFT+F3
67向下填充CTRL+D
68向右填充CTRL+R
69定义名称CTRL+F3
708>Excel快捷键之设置数据格式
71显示“样式”对话框ALT+' (撇号)
72显示“单元格格式”对话框CTRL+1
73应用“常规”数字格式CTRL+SHIFT+~
74应用带两个小数位的“贷币”格式CTRL+SHIFT+$
75应用不带小数位的“百分比”格式CTRL+SHIFT+%
76应用带两个小数位的“科学记数”数字格式CTRL+SHIFT+^
77应用年月日“日期”格式CTRL+SHIFT+#
78应用小时和分钟“时间”格式,并标明上午或下午CTRL+SHIFT+@
79应用具有千位分隔符且负数用负号 (-) 表示CTRL+SHIFT+!
80应用外边框CTRL+SHIFT+&
81删除外边框CTRL+SHIFT+_
82应用或取消字体加粗格式CTRL+B
83应用或取消字体倾斜格式CTRL+I
84应用或取消下划线格式CTRL+U
85应用或取消删除线格式CTRL+5
86隐藏行CTRL+9
87取消隐藏行CTRL+SHIFT+( 左括号
88隐藏列CTRL+0(零)
89取消隐藏列CTRL+SHIFT+)右括号
909>Excel快捷键之编辑数据
91编辑活动单元格并将插入点放置到线条末尾F2
92取消单元格或编辑栏中的输入项ESC
93编辑活动单元格并清除其中原有的内容BACKSPACE
94将定义的名称粘贴到公式中F3
95完成单元格输入ENTER
96将公式作为数组公式输入CTRL+SHIFT+ENTER
97在公式中键入函数名之后,显示公式选项板CTRL+A
98在公式中键入函数名后为该函数插入变量名和括号CTRL+SHIFT+A
99显示“拼写检查”对话框。F7 键
10010>Excel快捷键之插入、删除和复制选中区域
101复制选定区域CTRL+C
102剪切选定区域CTRL+X
103粘贴选定区域CTRL+V
104清除选定区域的内容DELETE
105删除选定区域CTRL+ 连字符
106撤消最后一次操作CTRL+Z
107插入空白单元格CTRL+SHIFT+ 加号
10811>Excel快捷键之在选中区域内移动
109在选定区域内由上往下移动ENTER
110在选定区域内由下往上移动SHIFT+ENTER
111在选定区域内由左往右移动TAB
112在选定区域内由右往左移动SHIFT+TAB
113按顺时针方向移动到选定区域的下一个角CTRL+PERIOD
114右移到非相邻的选定区域CTRL+ALT+右箭头键
115左移到非相邻的选定区域CTRL+ALT+左箭头键
11612>Excel快捷键之选择单元格、列或行
117选定当前单元格周围的区域CTRL+SHIFT+*(星号)
118将选定区域扩展一个单元格宽度SHIFT+ 箭头键
119选定区域扩展到单元格同行同列的最后非空单元格CTRL+SHIFT+ 箭头键
120将选定区域扩展到行首SHIFT+HOME
121将选定区域扩展到工作表的开始CTRL+SHIFT+HOME
122将选定区域扩展到工作表的最后一个使用的单元格CTRL+SHIFT+END
123选定整列CTRL+SPACEBAR
124选定整行SHIFT+SPACEBAR
125选定整个工作表CTRL+A
126如果选定了多个单元格则只选定其中的单元格SHIFT+BACKSPACE
127将选定区域向下扩展一屏SHIFT+PAGE DOWN
128将选定区域向上扩展一屏SHIFT+PAGE UP
129选定了一个对象,选定工作表上的所有对象CTRL+SHIFT+SPACEBAR
130在隐藏对象、显示对象与对象占位符之间切换CTRL+6
131显示或隐藏“常用”工具栏CTRL+7
132使用箭头键启动扩展选中区域的功能F8
133将其他区域中的单元格添加到选中区域中SHIFT+F8
134将选定区域扩展到窗口左上角的单元格SCROLLLOCK, SHIFT+HOME
135将选定区域扩展到窗口右下角的单元格SCROLLLOCK, SHIFT+END
13613>Excel快捷键之处于End模式时展开选中区域
137打开或关闭 END 模式END
138将选定区域扩展到单元格同列同行的最后非空单元格END, SHIFT+ 箭头键
139将选定区域扩展到工作表上包含数据的最后一个单元格END, SHIFT+HOME
140将选定区域扩展到当前行中的最后一个单元格END, SHIFT+ENTER
14114>Excel快捷键之选择含有特殊字符单元格
142选中活动单元格周围的当前区域CTRL+SHIFT+*(星号)
143选中当前数组,此数组是活动单元格所属的数组CTRL+/
144选定所有带批注的单元格CTRL+SHIFT+O (字母 O)
145选择行中不与该行内活动单元格的值相匹配的单元格CTRL+\
146选中列中不与该列内活动单元格的值相匹配的单元格CTRL+SHIFT+|
147选定当前选定区域中公式的直接引用单元格CTRL+[ (左方括号)
148选定当前选定区域中公式直接或间接引用的所有单元格CTRL+SHIFT+{ 左大括号
149只选定直接引用当前单元格的公式所在的单元格CTRL+] (右方括号)
150选定所有带有公式的单元格,这些公式直接或间接引用当前单元格CTRL+SHIFT+}右大括号