问题在于,它将针对找到的每个数字在新行上打印每个结果。它也忽略了我创建的列表。
我要做的是将所有数字都放在一个列表中。 我使用了join(),但是它不起作用。
代码:
def readfile():
regex = re.compile('\d+')
for num in regex.findall(open('/path/to/file').read()):
lst = [num]
jn = ''.join(lst)
print(jn)
输出:
122
34
764
答案 0 :(得分:3)
出了什么问题:
# this iterates the single numbers you find - one by one for num in regex.findall(open('/path/to/file').read()): lst = [num] # this puts one number back into a new list jn = ''.join(lst) # this gets the number back out of the new list print(jn) # this prints one number
修复:
阅读re.findall()的节目是您,它已经返回了列表。
不需要({很多)在其上使用for
进行打印。
如果您想要一个列表-只需使用re.findall()
的返回值-如果您要打印该列表,请使用Printing an int list in a single line python3中的一种方法(SO上有几篇关于在一行中打印的文章) ):
import re
my_r = re.compile(r'\d+') # define pattern as raw-string
numbers = my_r.findall("123 456 789") # get the list
print(numbers)
# different methods to print a list on one line
# adjust sep / end to fit your needs
print( *numbers, sep=", ") # print #1
for n in numbers[:-1]: # print #2
print(n, end = ", ")
print(numbers[-1])
print(', '.join(numbers)) # print #3
输出:
['123', '456', '789'] # list of found strings that are numbers
123, 456, 789
123, 456, 789
123, 456, 789
Doku:
sep=
and end=
有关一行打印的更多信息:
答案 1 :(得分:1)
在您的情况下,regex.findall()
返回一个列表,您要加入每次迭代并打印它。
这就是为什么您遇到此问题的原因。
您可以尝试类似的方法。
numbers.txt
Xy10Ab
Tiger20
Beta30Man
56
My45one
声明:
>>> import re
>>>
>>> regex = re.compile(r'\d+')
>>> lst = []
>>>
>>> for num in regex.findall(open('numbers.txt').read()):
... lst.append(num)
...
>>> lst
['10', '20', '30', '56', '45']
>>>
>>> jn = ''.join(lst)
>>>
>>> jn
'1020305645'
>>>
>>> jn2 = '\n'.join(lst)
>>> jn2
'10\n20\n30\n56\n45'
>>>
>>> print(jn2)
10
20
30
56
45
>>>
>>> nums = [int(n) for n in lst]
>>> nums
[10, 20, 30, 56, 45]
>>>
>>> sum(nums)
161
>>>
答案 2 :(得分:-1)
使用列表内置函数来附加新值。
def readfile():
regex = re.compile('\d+')
lst = []
for num in regex.findall(open('/path/to/file').read()):
lst.append(num)
print(lst)