我想从用户输入一个textarea值的人名,并将它们分成数组中的项目.
从理论上可能的输入:
people = "Abby Andrews, Ben \r\nCharlie Connors Daphne D., Ernie E. Engels; Faye\r\n\r\nGary Gomez"
array = people.split('??')
Run Code Online (Sandbox Code Playgroud)
如何构建正则表达式以成功分裂像上面这样的疯狂链?
应分开:
\r,\n,\r\n,)或分号(;)不应拆分:
我尝试过people.split(/\r\n,;/),people.split(/,;\r\n/)以及它们的组合,但没有产生结果.
请考虑以下内容(Windows下的Python 3.2):
>>> import io
>>> import csv
>>> output = io.StringIO() # default parameter newline=None
>>> csvdata = [1, 'a', 'Whoa!\nNewlines!']
>>> writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow(csvdata)
25
>>> output.getvalue()
'1,"a","Whoa!\nNewlines!"\r\n'
Run Code Online (Sandbox Code Playgroud)
为什么有一个\n- 不应该已经转换为\r\n自启用通用换行模式?
启用此功能,在输入,线路的结局
\n,\r或\r\n将被转换为\n被返回给调用者之前.相反,在输出时,\n转换为系统默认行分隔符,os.linesep.
我正在解释我实际上希望做的事情,以防有更高级别的建议完全避免这个问题.
我有我保存在三个数组科学数据:wave,flux,error.它们代表波长,通量和误差值.阵列长约4000个元素(并且数组的索引号对应于检测器的像素数).
我做了各种各样的测试,但是对于这个例子,我们只是说我做了2次测试,我需要有效地屏蔽掉相关的数组.
masks = []
masks.append(wave > 5500.35)
masks.append(flux / wave > 8.5)
Run Code Online (Sandbox Code Playgroud)
Subquestion:我可以很容易地做2面罩案例,如:
fullmask = [x[0] and x[1] for x in zip(masks[0], masks[1])]
Run Code Online (Sandbox Code Playgroud)
但是对于任意数量的面具来说,这样做的方法是什么?
真正的问题:有没有对所有口罩适用于每一个阵列(的方式wave,flux,error),并保持原有的索引号?通过"保留原始索引号"我的意思是我原则上可以取掩蔽波阵列的平均像素数(原始索引号)?也就是说:如果wave[98:99]唯一没有掩盖的部分,平均像素将是98.5.
元问题:这是做这些事情的最好方法吗?
编辑
所以这里有一些样本数据可供使用.
wave = array([5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010,
5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021,
5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, …Run Code Online (Sandbox Code Playgroud) 我试图从一些巨大的文件中读取数据并将其写回来,但我意识到主要成本来自于将数据分配到列表而不是从文件中读取或写入数据....
rows = [None] * 1446311
begin = datetime.datetime.now()
for i in range( 1446311 ):
row = csvReader.next()
rows[i] = row
print datetime.datetime.now() - begin
Run Code Online (Sandbox Code Playgroud)
上面的代码需要18秒但是5秒,如果我注释掉第5行(rows[i] = row),我已经预先建立了列表(即保留了内存),但为什么它仍然如此慢?我能做什么让它更快?我尝试row for row in csvReader但是表现更差......
约翰
当尝试使用Python内置模块'timeit'时,如下所示:
timeit.Timer('print "hi"').timeit()
Run Code Online (Sandbox Code Playgroud)
它打印多行; 这是为什么?它不断印刷"喜":
hi
hi
hi
hi
...
Run Code Online (Sandbox Code Playgroud) 我正在使用mySQL.如果'在要添加到数据库的String中,则无法处理.
我试过了:
replaceAll("'","\\'")
Run Code Online (Sandbox Code Playgroud)
和
replaceAll("'","\'")
Run Code Online (Sandbox Code Playgroud)
'有\'什么想法我会如何替换?
作为输入我得到字符串"some text\\nsome text"- >如图所示"some text\nsome text".如何删除一个反斜杠并获取
"some text\nsome text"- >显示为
"some text
some text"
Run Code Online (Sandbox Code Playgroud)
这也适用于其他特殊角色,如"\t"?使用正则表达式,它可以只做
textLine.replace("\\n", "\n") and so on.
还有另外一种方法吗?
以下是我的整个代码.在尝试执行它时,我不断收到错误消息
File "/Users/thomas/prac.py", line 15
elif choice == "1":
IndentationError: expected an indented block
Run Code Online (Sandbox Code Playgroud)
现在我确定我的缩进是正确的(我没有混合标签和空格!)但我不知道为什么这不起作用:
keepProgramRunning = True
while keepProgramRunning:
print "Pleases choose an option: "
print "0"
print "1"
choice = raw_input()
if choice == "0":
#do something
elif choice == "1":
print "Bye"
keepProgramRunning = False
else:
print "try again"
Run Code Online (Sandbox Code Playgroud)
怎么了?
我有一个字符串s(注意,a并b没有用引号括起来,所以它不能直接评估为a dict):
s = '{a:1,b:2}'
Run Code Online (Sandbox Code Playgroud)
我想将此变量转换为dict如下所示:
{'a':1,'b':2}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个看起来像这样的文本文件
Name #Variants #Cases #Controls
CNGA3 5 5 0
GPR125 4 3 0
IGHMBP2 4 4 0
STK11IP 4 4 0
ACAD9 3 3 0
ANKRD17 3 3 0
Run Code Online (Sandbox Code Playgroud)
我想解析这个文件并将所有的基因名称(name列)返回到列表中list_of_genes,或类似的东西.
我有以下代码
gene_list = []
for i in range (6, 7):
run_file = open('run_{}_results.txt'.format(i))
gene = re.compile('[^\s]*', re.I)
for line in run_file:
match=gene.match(line, re.IGNORECASE)
if match:
matched_gene = match.group()
gene_list.append(matched_gene)
Run Code Online (Sandbox Code Playgroud)
当我运行该代码时,我得到的结果是
['GA3', 'R125', 'HMBP2', 'K11IP', 'AD9', 'KRD17']
Run Code Online (Sandbox Code Playgroud)
正则表达式正在跳过每个基因的前两个字符,我无法弄清楚原因.