Python学习笔记
1、IndentationError: unexpected indent你就要知道python编译器是在告诉你“Hi,老兄,你的文件里格式不对了,可能是tab和空格没对齐的问题,你需要检查下tab和空格了”。 2、Python 的stat 模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import os,time,statfileStats = os.stat ( 'test.txt' ) fileInfo = { 'Size' :fileStats [ stat.ST_SIZE ], 'LastModified' :time.ctime( fileStats [ stat.ST_MTIME ] ), 'LastAccessed' :time.ctime( fileStats [ stat.ST_ATIME ] ), 'CreationTime' :time.ctime( fileStats [ stat.ST_CTIME ] ), 'Mode' :fileStats [ stat.ST_MODE ] } for field in fileInfo: print '%s:%s' % (field,fileInfo[field]) for infoField,infoValue in fileInfo: print '%s:%s' % (infoField,infoValue) if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory. ' else : print 'Non-directory.' if stat.S_ISREG( fileStats [ stat.ST_MODE ] ): print 'Regular file.' elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ): print 'Shortcut.' elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ): print 'Socket.' elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ): print 'Named pipe.' elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ): print 'Block special device.' elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ): print 'Character special device.'
stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义.我们可方便地根据stat模块存取os.stat()中的值.
os.stat(path)执行一个stat()系统调用在给定的path上,返回一个类元组对象(stat_result对象,包含10个元素),属性与stat结构成员相关:st_mode(权限模式),st_ino(inode number),st_dev(device),st_nlink(number of hard links),st_uid(所有用户的user id),st_gid(所有用户的group id),st_size(文件大小,以位为单位),st_atime(最近访问的时间),st_mtime(最近修改的时间),st_ctime(创建的时间)
3、Python信号处理模块signal Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能。
要查看Python中的信号量,可以使用dir(signal)来查看。
在signal模块中,主要是使用signal.signal()函数来预设信号处理函数
singnal.signal(signalnum, handler)
其中第一个参数是信号量,第二个参数信号处理函数。
下面看个简单的例子,其中
定义了一个信号处理函数signal_handler(),用来处理程序接收到信号时执行的操作
一段循环等待发送信号1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import signalimport timedef signal_handler (signum, frame ): print ('Received signal: ' , signum) while True : signal.signal(signal.SIGHUP, signal_handler) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGQUIT, signal_handler) signal.signal(signal.SIGALRM, signal_handler) signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGCONT, signal_handler) while True : print ('waiting' ) time.sleep(1 )
运行上面的程序
python test.py
然后另外开一个终端,找到对应的进程,并执行下面的kill操作
1 2 3 4 5 6 7 kill -1 <pid> kill -2 <pid> kill -3 <pid> kill -14 <pid> kill -15 <pid> kill -18 <pid> kill -9 <pid>
此时可以看到test.py的输出,打印的就是具体接收到的信号。
这里注意一点就是程序中注册了SIGINT信号,所以在运行程序后使用CTRL+C并不能结束进程,而是仍然打印进程接收到的信号。
signal.alarm()
另外,signal模块提供了一个很有用的函数signal.alarm(),它用于在一定时间后向进程自身发送SIGALRM信号,比如下面的例子设置5秒后向自己发送一个SIGALRM信号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import signalimport timedef signal_handler (signum, frame ): print ('Received signal: ' , signum) while True : signal.signal(signal.SIGALRM, signal_handler) signal.alarm(5 ) while True : print ('waiting' ) time.sleep(1 )
4、python os.path模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 os.path.abspath(path) os.path.basename(path) os.path.commonprefix(list ) os.path.dirname(path) os.path.exists(path) os.path.lexists os.path.expanduser(path) os.path.expandvars(path) os.path.getatime(path) os.path.getmtime(path) os.path.getctime(path) os.path.getsize(path) os.path.isabs(path) os.path.isfile(path) os.path.isdir(path) os.path.islink(path) os.path.ismount(path) os.path.join(path1[, path2[, ...]]) os.path.normcase(path) os.path.normpath(path) os.path.realpath(path) os.path.relpath(path[, start]) os.path.samefile(path1, path2) os.path.sameopenfile(fp1, fp2) os.path.samestat(stat1, stat2) os.path.split(path) os.path.splitdrive(path) os.path.splitext(path) os.path.splitunc(path) os.path.walk(path, visit, arg) 3 个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数 os.path.supports_unicode_filenames
5、typeerror ‘builtin_function_or_method’ object has no attribute ‘getitem ‘ 是因为把path.append(py)写成了path.append[py]
6、将列表写入文本 1 2 3 4 5 6 7 list = ['foo' , 'bar' ]list .append("item" )fl=open ('list.txt' , 'w' ) for i in list : fl.write(i) fl.write("\n" ) fl.close()
7、判断文件或者文件夹是否u你在 1 2 3 import os os.path.isfile('test.txt' ) os.path.exists(directory)
8、在用json.load()判断文件格式是否错误的时候,出现ValueError: No JSON object could be decoded 这个是由于json文件的闭合部分后面不能有, 对于列表最后,添加上一个逗号,对于本身Python中的语法,是允许的, 对于其他语言,比如C语言,是允许的, 但是,在Python 2.7.3中的json库中,是不支持的。