Nested list: TypeError: expected string or bytes-like object
Nested list: TypeError: expected string or bytes-like object
我有一个嵌套列表,我想在其中进行一些字符串操作。但是,我收到了此类错误。有谁知道这是什么意思?
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
pattern = re.search(r'\d{2}\/',Well)
ii = pattern.start()
well2 = Well[0:ii] + ' ' + Well[ii:]
a=cor_welldata.append(well2)
print(a)
format_Well_Data([['AMV-10st102/13/19 4 954 3,968 '],
['AMV-0201/24/19 6 3,078 1,303 ' ]])
The code should add 2 space at the start of the date(mm/dd/yy):
[['AMV-10st1 02/13/19 4 954 3,968 '],['AMV-02 01/24/19 6 3,078 1,303 ' ]]
However, i get this huge error message:
C:\Users\gogut\AppData\Local\Continuum\anaconda3\envs\PTT\python.exe C:/APPL/DPI/PDF_reader/regextest_loop.py
Traceback (most recent call last):
File "C:/APPL/DPI/PDF_reader/regextest_loop.py", line 14, in <module>
['AMV-0201/24/19 6 3,078 1,303 ' ]])
File "C:/APPL/DPI/PDF_reader/regextest_loop.py", line 6, in format_Well_Data
pattern = re.search(r'\d{2}\/',Well)
File "C:\Users\gogut\AppData\Local\Continuum\anaconda3\envs\PTT\lib\re.py", line 182, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object
所以有两件事。
首先是 re.search
需要一个字符串,目前您提供一个列表。如果只有一个元素,为什么需要包含一个列表?如果有更多只是压扁它们?
第二个 .append
方法不 return 附加列表,它 returns None
。这是一个就地操作,所以只打印列表。
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
pattern = re.search(r'\d{2}\/', Well)
ii = pattern.start()
well2 = Well[0:ii] + ' ' + Well[ii:]
cor_welldata.append(well2)
print(cor_welldata)
format_Well_Data(['AMV-10st102/13/19 4 954 3,968 ',
'AMV-0201/24/19 6 3,078 1,303 ' ])
输出:
['AMV-10st1 02/13/19 4 954 3,968 ', 'AMV-02 01/24/19 6 3,078 1,303 ']
您需要 return 来自函数的数据,加上在您的输入中,您已将数据保存在列表的列表中。以下是不修改输入数据的解决方案
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
for wells in Well:
pattern = re.search(r'\d{2}\/',wells)
ii = pattern.start()
well2 = wells[0:ii] + ' ' + wells[ii:]
cor_welldata.append(well2)
print(cor_welldata)
return cor_welldata
format_Well_Data([['AMV-10st102/13/19 4 954 3,968 '],
['AMV-0201/24/19 6 3,078 1,303 '] ])
否则,如果您不修改当前代码,则可以将输入数据修改为
来自
[['AMV-10st102/13/19 4 954 3,968 '],['AMV-0201/24/19 6 3,078 1,303 '] ]
到['AMV-10st102/13/19 4 954 3,968 ','AMV-0201/24/19 6 3,078 1,303 ' ]
这里是小改进代码
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
patt = re.findall(r'\d\d/\d\d/\d\d',Well)
str1 = Well.replace(patt[0], ' {}'.format(patt[0]))
cor_welldata.append(str1)
return cor_welldata
format_Well_Data(['AMV-10st102/13/19 4 954 3,968 ',
'AMV-0201/24/19 6 3,078 1,303 ' ])
"""
output
['AMV-10st1 02/13/19 4 954 3,968 ', 'AMV-02 01/24/19 6 3,078 1,303 ']
"""
我有一个嵌套列表,我想在其中进行一些字符串操作。但是,我收到了此类错误。有谁知道这是什么意思?
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
pattern = re.search(r'\d{2}\/',Well)
ii = pattern.start()
well2 = Well[0:ii] + ' ' + Well[ii:]
a=cor_welldata.append(well2)
print(a)
format_Well_Data([['AMV-10st102/13/19 4 954 3,968 '],
['AMV-0201/24/19 6 3,078 1,303 ' ]])
The code should add 2 space at the start of the date(mm/dd/yy):
[['AMV-10st1 02/13/19 4 954 3,968 '],['AMV-02 01/24/19 6 3,078 1,303 ' ]]
However, i get this huge error message:
C:\Users\gogut\AppData\Local\Continuum\anaconda3\envs\PTT\python.exe C:/APPL/DPI/PDF_reader/regextest_loop.py
Traceback (most recent call last):
File "C:/APPL/DPI/PDF_reader/regextest_loop.py", line 14, in <module>
['AMV-0201/24/19 6 3,078 1,303 ' ]])
File "C:/APPL/DPI/PDF_reader/regextest_loop.py", line 6, in format_Well_Data
pattern = re.search(r'\d{2}\/',Well)
File "C:\Users\gogut\AppData\Local\Continuum\anaconda3\envs\PTT\lib\re.py", line 182, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object
所以有两件事。
首先是 re.search
需要一个字符串,目前您提供一个列表。如果只有一个元素,为什么需要包含一个列表?如果有更多只是压扁它们?
第二个 .append
方法不 return 附加列表,它 returns None
。这是一个就地操作,所以只打印列表。
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
pattern = re.search(r'\d{2}\/', Well)
ii = pattern.start()
well2 = Well[0:ii] + ' ' + Well[ii:]
cor_welldata.append(well2)
print(cor_welldata)
format_Well_Data(['AMV-10st102/13/19 4 954 3,968 ',
'AMV-0201/24/19 6 3,078 1,303 ' ])
输出:
['AMV-10st1 02/13/19 4 954 3,968 ', 'AMV-02 01/24/19 6 3,078 1,303 ']
您需要 return 来自函数的数据,加上在您的输入中,您已将数据保存在列表的列表中。以下是不修改输入数据的解决方案
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
for wells in Well:
pattern = re.search(r'\d{2}\/',wells)
ii = pattern.start()
well2 = wells[0:ii] + ' ' + wells[ii:]
cor_welldata.append(well2)
print(cor_welldata)
return cor_welldata
format_Well_Data([['AMV-10st102/13/19 4 954 3,968 '],
['AMV-0201/24/19 6 3,078 1,303 '] ])
否则,如果您不修改当前代码,则可以将输入数据修改为
来自
[['AMV-10st102/13/19 4 954 3,968 '],['AMV-0201/24/19 6 3,078 1,303 '] ]
到['AMV-10st102/13/19 4 954 3,968 ','AMV-0201/24/19 6 3,078 1,303 ' ]
这里是小改进代码
import re
def format_Well_Data(welldata):
cor_welldata=[]
for Well in welldata:
patt = re.findall(r'\d\d/\d\d/\d\d',Well)
str1 = Well.replace(patt[0], ' {}'.format(patt[0]))
cor_welldata.append(str1)
return cor_welldata
format_Well_Data(['AMV-10st102/13/19 4 954 3,968 ',
'AMV-0201/24/19 6 3,078 1,303 ' ])
"""
output
['AMV-10st1 02/13/19 4 954 3,968 ', 'AMV-02 01/24/19 6 3,078 1,303 ']
"""