如何解决Python脚本在Linux和Windows上的格式问题
python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者在Linux系统使用JEdit进行Python脚本编写,由于在Linux编写脚本比较痛苦,比如想一眼看出相同的变量在哪个地方使用就非常不方便,所以想转到Window系统上进行编写,在Windows上有一个非常轻量级的脚本编写工具:Note Pad++, 还有一个Eclipse上的插件pydev。
但是直接将linux上的Python脚本直接移到window上编写时出现了大量的缩进问题,因为Linux和window上对待tab是不同的方式,有的是看做是一个space有的看作是几个space,非常的麻烦。
如何解决呢?
方法就是各个工具都有一个功能叫是否将tab看做space的功能,只要在linux上的JEdit编写工具中进行统一处理,如JEdit统一调整缩进的方式是:Edit - Indent - Spaces to Tabs 或 Tabs to Spaces 这里可以选择Tabs to Spaces,调整后,放到windows打开,此时就会发现,缩进的格式就统一了。
反之,在Pydev 上也有这样的统一调整缩进的方式:Source - Convert space-tabs to tabs 或 Convert tabs to space-tabs
而NotePad ++ 上也有这样的统一调整缩进的方式:Edit - Blank Operations - Tab to Space 或 Space to Tab (All) 或 Space to Tab (leading)
下面附带介绍 :Eclipse + pydev:
依靠强大的eclipse,pydev显得格外耀眼。强大的调试功能和舒服的编辑环境让pydev赢得了许多人的青睐。不过eclipse本来就是耗资源大户,pydev在这一点上毫无办法,但现在的电脑都很快了,跑eclipse根本就是小case,不用担心太多。除了强大的调试功能,依靠eclipse,pydev的代码浏览能力是其它所有IDE所不能比的,比如按住CTRL键再点击一个类就能自动跳到该类的定义,这对于阅读代码非常有用。现在pydev extension也开源了,所以一些(我不知道的)高级的功能也被融入到pydev里了。
python 简单脚本 初学者请大家帮忙
f=open('file_name.txt','r')
txtList=f.readlines()
f2=open('other_file.txt','w')
for data in txtList:
if not data.endswith('OK'):
f2.write(data)
f2.close()
f.close()
求帮忙写一个python自动脚本完成以下步骤:
这个就用shell比较方便吧?
写一个shell脚本,比如shell.sh
startcluster start xyz
tarcluster put xyz /path/to/file/or/dir /path/on/remote/server
starcluster sshmaster xyz
mpicc abc
mpirun abc
然后在python里直接调用shell.sh
import subprocess
p = subprocess.Popen('/home/username/shell.sh',stdout=subprocess.PIPE)
print p.stdout.readlines()
或者如果你愿意的话,也可以直接用subprocess模块来调用所有的命令。
比如:
p = subprocess.Popen('startcluster start xyz',stdout=subprocess.PIPE)
然后逐个看看每个步骤的返回信息。
有了python django的自动转码,就可以挡住xss了吗
这和溢出防范很困难一个道理。是系统问题,单靠“工具”不容易解决。
Python后端工程师面试题目有哪些
一.语言
1.推荐一本看过最好的python书籍?
2.谈谈python的装饰器,迭代器,yield?
3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗?
4.python适合的场景有哪些?当遇到计算密集型任务怎么办?
5.python高并发解决方案?我希望听到twisted-tornado-gevent,能扯到golang,erlang更好
二.操作系统
可以直接认为是linux,毕竟搞后端的多数是和linux打交道。
1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗?
2.time_wait是什么情况?出现过多的close_wait可能是什么原因?
3.epoll,select的区别?边缘触发,水平触发区别?
三.存储
存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例
mysql相关
1.谈谈mysql字符集和排序规则?
2.varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符
3.primary key和unique的区别?
4.外键有什么用,是否该用外键?外键一定需要索引吗?
5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况?
6.索引有什么用,大致原理是什么?设计索引有什么注意点?
redis相关
1.什么场景用redis,为什么mysql不适合?
2.谈谈redis的事务?用事务模拟原子+1操作?原子操作还有其它解决方案吗?
3.redis内存满了会怎么样?
四.安全
web安全相关
1.sql注入是怎么产生的,如何防止?
2.xss如何预防?htmlescape后能否避免xss?
3.csrf是什么?django是如何防范的?
密码技术
1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量?
2.简单说说https的过程?
3.对称加密与非对称加密区别?
3.如何生成共享秘钥? 如何防范中间人攻击?
五.杂
是否关注新技术啊?golang,rust是否了解?numpy,pandas是啥鸟?
是否紧跟时代潮流?逛不逛微博,刷不刷知乎?
可能你觉得我问的好细,但这好多都是平常经常遇到,并需要解决的,细节更能体现一个人。
如果你觉得小kiss,欢迎投简历给我yihaibo@longtugame.com,龙图游戏运营支持中心数据分析部招人;觉得有点问题,那还等什么,赶快来和我交流交流。
更新:讨论区挺热闹,有人说好简单,有人说好难,其实我觉得这只适合面试2~3年工作经验的后端工程师。真的没有问
很难的题目,只是可能你平时没有注意。
在这里我推荐几本书吧
python参考手册,绝对让你更上一层楼
图解密码技术,密码入门不二之选
mysql技术内幕第五版,有点厚当手册读读,要有耐心,高性能mysql也强烈建议读读
effective tcp/ip programming
为什么评论区有这么大差异?我想是个人经历不一样吧,如果是搞web的对操作系统这块和密码技术会偏弱,但如果是系统工程师或是游戏服务端这块会明显偏强。
六.后记
最近我也面试了不少童鞋,我发现能达到要求的真的少之又少,很多hr都说Python是最难招聘的岗位,我想是有道理的,这真的很值得我们去深思?
我想有一部分原因是Python这门语言造成的,会写Python的人很多,但写的好的人很少,大部分都把Python当做脚本来写,缺乏面向对 象,模式的思想。想想Java,大家都习惯了接口,实现分离,设计模式在Java中也喊了很多年,尤其是ssh三大框架一出,用着用着就理所当然的认为就 该这么做,虽然也有点坏处,但对企业级Java开发无疑是一大进步。
反观Python,尤其是生成器,协程,元类给Python注入了很大的灵活性,想写的Pythonic有不小难度,但其实Python高级特性就那么几个,干掉了也就没有了。
当你觉得Python遇到了瓶颈,不妨停下来好好想想。研究研究设计模式,想想重构,了解领域驱动设计,敏捷开发,再回来读读以前写的代码,当眼界变高了,代码也就美了。
当然思想的提高不是一朝一夕,模式,原则会经常让你纠结,纠结就会思索,思考就走出了自己的路,当然条条大路通罗马。
数据库等存储技术是研发工程师迈不过的坎,对关系数据库以mysql举例来说,你必须清楚的知道什么字段选择什么类型,类型字节大小,限制条件,这 东西也很容易理解,多想想即可,比如set类型,要支持交并等操作,1个字节只能存8个类别。数据类型搞定了,下面就是索引了,mysql索引种类?主 键,唯一索引,普通索引。索引类别,BTree索引,hash索引。索引的优缺点,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情况,比如mysql子查询慢等。其实到这里研发工程师就差不多,当然你可以继续深入下去,比如读写分离,集群管理,甚至一些 参数调优。
python脚本问题
哎,百度这个贴代码的功能有待提高!
代码是计算两个数相加减吧,首先,第二行raw_input()即是把输入的内容当作字符串了,不需要再转换了;其次,上面的程序倒数第五、第七行写错了;最后,这个程序只能计算两个数之间的加减,对于一串数字的运算就无能为力了。
按给出的算法修改如下:
import string
a=raw_input('请输入运算式:')
ans=0
flag=True
while flag:
if a.find('+') = 1:
sign='+'
x=a[0:a.index(sign)]
y=string.atoi(x)
ans+=y
a=a[a.index(sign)+1:]
if a.find('+') 0 and a.find('-') 0:
z=string.atoi(a)
ans+=z
print ans
flag=False
elif a.find('-') =1:
sign='-'
x=a[0:a.index(sign)]
y=string.atoi(x)
ans+=y
a=a[a.index(sign)+1:]
if a.find('+') 0 and a.find('-') 0:
z=string.atoi(a)
ans-=z
print ans
flag=False
-------------下面这个删掉删掉-------------------
import string
a=raw_input('请输入运算式:')
sum=0
flag=True
while flag:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;if a.find('+') amp;amp;gt;= 1:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sign='+'
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;x=a[0:a.index(sign)]
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;y=string.atoi(x)
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sum+=y
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;a=a[a.index(sign)+1:]
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;if a.find('+') amp;amp;lt; 0 and a.find('-') amp;amp;lt; 0:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;z=string.atoi(a)
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sum+=z
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;print sum
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;flag=False
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;elif a.find('-') amp;amp;gt;=1:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sign='-'
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;x=a[0:a.index(sign)]
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;y=string.atoi(x)
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sum+=y
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;a=a[a.index(sign)+1:]
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;if a.find('+') amp;amp;lt; 0 and a.find('-') amp;amp;lt; 0:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;z=string.atoi(a)
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;sum-=z
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;print sum
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;flag=False
如果要重新写一个,其实很简单,用input()这个函数就行了:
input.__doc__
'input([prompt]) - value\n\nEquivalent to eval(raw_input(prompt)).'。
程序如下:
#-*- coding:utf-8 -*-
def calcu():
while True:
poly=input('请输入运算式:')
print poly
if __name__ == '__main__':
calcu()
#-*- coding:utf-8 -*-
def calcu():
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;while True:
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;poly=input('请输入运算式:')
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;print poly
if __name__ == '__main__':
amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;amp;amp;nbsp;calcu()
--------------上面这个也删掉-------------------
如何面试Python后端工程师
一.语言
1.推荐一本看过最好的python书籍? 拉开话题好扯淡
2.谈谈python的装饰器,迭代器,yield?
3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗?
4.python适合的场景有哪些?当遇到计算密集型任务怎么办?
5.python高并发解决方案?我希望听到twisted-tornado-gevent,能扯到golang,erlang更好
二.操作系统
可以直接认为是linux,毕竟搞后端的多数是和linux打交道。
1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗?
2.time_wait是什么情况?出现过多的close_wait可能是什么原因?
3.epoll,select的区别?边缘触发,水平触发区别?
三.存储
存储可能包含rdbms,nosql以及缓存等,我以MySQL,redis举例
mysql相关
1.谈谈mysql字符集和排序规则?
2.varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符
3.primary key和unique的区别?
4.外键有什么用,是否该用外键?外键一定需要索引吗?
5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况?
6.索引有什么用,大致原理是什么?设计索引有什么注意点?
redis相关
1.什么场景用redis,为什么mysql不适合?
2.谈谈redis的事务?用事务模拟原子+1操作?原子操作还有其它解决方案吗?
3.redis内存满了会怎么样?
四.安全
web安全相关
1.sql注入是怎么产生的,如何防止?
2.xss如何预防?htmlescape后能否避免xss?
3.csrf是什么?django是如何防范的?
密码技术
1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量?
2.简单说说https的过程?
3.对称加密与非对称加密区别?
3.如何生成共享秘钥? 如何防范中间人攻击?
五.杂
是否关注新技术啊?golang,Rust是否了解?numpy,pandas是啥鸟?
是否紧跟时代潮流?逛不逛微博,刷不刷知乎?
可能你觉得我问的好细,但这好多都是平常经常遇到,并需要解决的,细节更能体现一个人。
如果你觉得小kiss,欢迎投简历给我yihaibo@longtugame.com,龙图游戏运营支持中心数据分析部招人;觉得有点问题,那还等什么,赶快来和我交流交流。
更新:讨论区挺热闹,有人说好简单,有人说好难,其实我觉得这只适合面试2~3年工作经验的后端工程师。真的没有问
很难的题目,只是可能你平时没有注意。
在这里我推荐几本书吧
python参考手册,绝对让你更上一层楼
图解密码技术,密码入门不二之选
mysql技术内幕第五版,有点厚当手册读读,要有耐心,高性能mysql也强烈建议读读
effective tcp/ip programming
为什么评论区有这么大差异?我想是个人经历不一样吧,如果是搞web的对操作系统这块和密码技术会偏弱,但如果是系统工程师或是游戏服务端这块会明显偏强。
六.后记
最近我也面试了不少童鞋,我发现能达到要求的真的少之又少,很多hr都说Python是最难招聘的岗位,我想是有道理的,这真的很值得我们去深思?
我想有一部分原因是Python这门语言造成的,会写Python的人很多,但写的好的人很少,大部分都把Python当做脚本来写,缺乏面向对象,模式的思想。想想Java,大家都习惯了接口,实现分离,设计模式在Java中也喊了很多年,尤其是ssh三大框架一出,用着用着就理所当然的认为就该这么做,虽然也有点坏处,但对企业级Java开发无疑是一大进步。
反观Python,尤其是生成器,协程,元类给Python注入了很大的灵活性,想写的Pythonic有不小难度,但其实Python高级特性就那么几个,干掉了也就没有了。
当你觉得Python遇到了瓶颈,不妨停下来好好想想。研究研究设计模式,想想重构,了解领域驱动设计,敏捷开发,再回来读读以前写的代码,当眼界变高了,代码也就美了。
当然思想的提高不是一朝一夕,模式,原则会经常让你纠结,纠结就会思索,思考就走出了自己的路,当然条条大路通罗马。
数据库等存储技术是研发工程师迈不过的坎,对关系数据库以mysql举例来说,你必须清楚的知道什么字段选择什么类型,类型字节大小,限制条件,这东西也很容易理解,多想想即可,比如set类型,要支持交并等操作,1个字节只能存8个类别。数据类型搞定了,下面就是索引了,mysql索引种类?主键,唯一索引,普通索引。索引类别,BTree索引,hash索引。索引的优缺点,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情况,比如mysql子查询慢等。其实到这里研发工程师就差不多,当然你可以继续深入下去,比如读写分离,集群管理,甚至一些参数调优。
编写一个python脚本,完成以下功能: (1)调用一个python程序,执行该程序; (2)该程序启动一个shell;
这还真不知道。。。不过我看了下要求,如果只是从一个文本(也可以是任何文件,例如py)读出代码,再运行结果。那只需要读出文本内容,然后使用exec执行就好了