如何在selenium python中每两行之后添加逗号?
现在我在每一行后面都有逗号,但我需要在每两行后面插入逗号。这是我正在编写的文本。 产品规格:如何在selenium python中每两行之后添加逗号?,python,selenium,Python,Selenium,现在我在每一行后面都有逗号,但我需要在每两行后面插入逗号。这是我正在编写的文本。 产品规格: LEVERANDØRENS VARENUMMER 31358DC2,EAN NUMMER 4005176465017 这是我的密码: specification.text.replace("\n",",").strip() 我的代码在每一行的末尾给我逗号,但我需要在每两行后面加逗号。以下是我的结果: LEVERANDØRENS VARENUMMER,31358
LEVERANDØRENS VARENUMMER 31358DC2,EAN NUMMER 4005176465017
这是我的密码:
specification.text.replace("\n",",").strip()
我的代码在每一行的末尾给我逗号,但我需要在每两行后面加逗号。以下是我的结果:
LEVERANDØRENS VARENUMMER,31358DC2,EAN NUMMER,4005176465017
我的预期结果如下:
LEVERANDØRENS VARENUMMER 31358DC2,EAN NUMMER 4005176465017
编辑:我只建议在您试图避免使用外部库时使用此方法。如果您可以访问像itertools这样的库(在Jason的回答中提到),您应该使用它们
这并不完全是小事。我组合的这个函数应该满足您的要求(增加了每N个字符执行一次的功能,而不仅仅是每两个字符执行一次)
def replaceVerynth(字符串:str,replace:str,replace_为:str,n:int):
out=“”
str_frags=string.split(replace)#将输入字符串拆分为子字符串
计数=1
对于str_frags中的frag[:len(str_frags)-1]:
out+=frag#将子字符串添加到输出字符串
如果计数%n==0:#替换第n个字符
out+=将_替换为
否则:#使用原始字符
输出+=替换
计数+=1
out+=str_frags[len(str_frags)-1]#添加最后一个字符串片段
返回
在您的特定情况下,您可以这样使用:
replaceVerynth(文本“\n”、“2”)。替换(“\n”、“2”)
您可以使用此行以逗号连接两行:
from itertools import izip_longest as izip # For Python 2
from itertools import zip_longest as izip # For Python 3
splitted = specification.text.split('\n')
text = ', '.join([' '.join([first, second]) if second else first for first, second in izip(splitted[::2], splitted[1::2])])
print(text)
输出:
'LEVERANDØRENS VARENUMMER 31358DC2, EAN NUMMER 4005176465017'
另外,如果您知道行数始终为偶数,那么您可以简化解决方案,只需使用zip
:
text = ', '.join([' '.join([first, second]) for first, second in zip(splitted[::2], splitted[1::2])])
您可以编写一个生成器,成对地迭代行。用空格连接,然后用逗号连接
text = """LEVERANDØRENS VARENUMMER
31358DC2
EAN NUMMER
4005176465017"""
def grab_2(seq):
iseq = iter(seq)
while True:
try:
yield next(iseq), next(iseq)
except StopIteration:
break
out = ",".join(" ".join(vals) for vals in grab_2(text.split("\n")))
print(out)
您可以使用pythonshell来探索这个解决方案,并根据需要添加功能
>>> text = """LEVERANDØRENS VARENUMMER
... 31358DC2
... EAN NUMMER
... 4005176465017"""
>>>
>>> def grab_2(seq):
... iseq = iter(seq)
... while True:
... try:
... yield next(iseq), next(iseq)
... except StopIteration:
... break
...
>>>
拆分该行将为您提供一个行列表,如果您愿意,可以进一步处理这些行
>>> lines = text.split("\n")
>>> lines
['LEVERANDØRENS VARENUMMER', '31358DC2', 'EAN NUMMER', '4005176465017']
一次抓取两行可以得到元组
>>> grabbed = list(grab_2(lines))
>>> for g in grabbed:
... print(g)
...
('LEVERANDØRENS VARENUMMER', '31358DC2')
('EAN NUMMER', '4005176465017')
这些块可以通过多种方式进行处理。除了与空格连接外,还可以使用格式说明符
>>> for g in grabbed:
... print("{0};{1}\n".format(*g), end="")
...
LEVERANDØRENS VARENUMMER;31358DC2
EAN NUMMER;4005176465017
汤卡斯·杰森。它起作用了,但izip在我当前的python版本中不起作用。将izip替换为zip后,它就可以工作了。@FarhanAhmed我使用了
izip
而不是zip
,因为zip
只能处理偶数个元素(2,4,6…),但不能处理奇数个元素(3,5,7…)。如果对你来说没问题,而且你知道行数总是偶数,那么就没问题了。否则,我建议您使用itertools中的zip函数(请注意,您应该只导入一个函数:izip_longest
(在Python 2中)或zip_longest
(在Python 3中)。这两个函数都不能同时使用),虽然您的代码对我不起作用,但不需要另一个库也可以解决。获取错误“AttributeError:'FirefoxWebElement'对象没有属性“split”,我将您的示例转换为运行的内容,这是stackoverflow的黄金标准。我只能猜测它在代码中的准确程度。与我的示例中的text.split
不同,我想您应该使用specification.text.split
——它在您发布的示例片段中起作用,因此应该在这里起作用。您好@tdelaney感谢您的澄清。我在使用specification.split,一次又一次地使用specification.text.split,正如你所说的,现在它开始工作了。Thankshi@tdelaney您能给我一些文档或链接让我更好地理解这个主题吗。假设每行后面都要有分号,每两行后面都要有逗号。如何做到这一点?您好@johnpaulr.pythonshell中没有出现任何错误,但输出为nothings,请参见图片link1图片link2