[英]how to get the part of string into a csv file using regular expression/split string in python?
这是 csv 文件我在数据库中有一个名为 build_ID 的列,它的值如下所示
build ID
5.30-420486
5.30-421040
5.30-421225
5.30-420664
我将这些值提取到 csv 文件中。 但我只想获取
420486
421040
421225
420664
我只想将这些值提取到 csv 文件中,我不想像这样提取5.30-420486。 我只想将 5.30- 之后的数字提取到 csv 文件中。
有人可以帮我解决这个问题。
问候,达山
def fetch_results():
query = r"select build_id,pass_percent,original_pass_percent from test_summary where
test_suite='%s'"
test_suite_list=['CI-FIT-Nitro','CI-FIT-Potash','SAT-C7000','SAT-Synergy','SAT-Synergy-
gen1','SAT-Synergy-gen2','Scale','Scale-DCS-VET','UPT_C7000','UPT_Synergy']
row_headers, rows = run_query_and_return_results(query,test_suite_list)
if not rows:
print("Empty rows")
else:
print("Rows :" + str(rows))
return rows
row12 = fetch_results()
for i in row12:
with open('%s_graph22.csv'%i,'w') as out:
csv_out=csv.writer(out)
csv_out.writerow(['build ID','Pass Percentage', 'original_pass_percent'])
for row in row12[i]:
csv_out.writerow(row)
如果是单行 - 您只需要使用:
split('-')[1]
对于您的第一个 ex(在一行中显示所有内容),您可以这样使用 re 库:
import re
string = "5.30-420486 5.30-421040 5.30-421225 5.30-420664"
matches = re.findall(r'\d*\.?\d*-(\d+)', string)
print(matches)
output:
['420486', '421040', '421225', '420664']
假设您的代码有效(没有数据和它的 rest 很难判断),您只需要更改此行:
csv_out.writerow(row)
类似于:
csv_out.writerow([row[0][5:], *row[1:]])
或者,如果您只想要第一个破折号的 position 之后的所有内容并且想使用正则表达式(尽管有更简单的方法可以进行这样的匹配),请在开始时import regex
并:
csv_out.writerow([re.match('^.*?-(.*)$', row[0]).group(1), *row[1:]])
假设每一行至少有一个破折号。
一点解释:如果你有一个列表(例如xs = [1, 2, 3, 4]
)并且你做了类似[xs[0]+1, *x[1:]]
的事情,你会得到一个新列表它具有列表x[0]
的第一个元素,并对其执行了一些操作,例如+1
,然后是列表x[1:]
的 rest ,它是列表中从索引1
处的元素开始的每个元素。 星号*
用于“解包”列表,以确保新列表包含列表中的元素,而不是列表本身。
xs = [1, 2, 3, 4]
print([xs[0]+6, *xs[1:]]) # prints [7, 2, 3, 4]
print([xs[0]+6, xs[1:]]) # prints [7, [2, 3, 4]]
正则表达式'^.*?-(.*)$'
只是说匹配字符串的开始^
和结束$
之间的所有内容,从最小数量的字符开始直到第一个破折号.*?-
,然后是组中捕获的所有其他内容(.*)
。 这就是为什么.group(1)
然后让你得到你所追求的字符串的一部分。
你可能没有^
和$
,但我把它们放在那里是为了明确。 如果字符串只包含'123-456789'
,没有也可以。 例如,如果字符串包含像'"123-456789"'
这样的引号,那么您需要这些引号而不是开始和结束标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.