拆分字符串python时出错,长度为1,需要2
我搞不清楚我做错了什么 以下是我的数据:拆分字符串python时出错,长度为1,需要2,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我搞不清楚我做错了什么 以下是我的数据: clientSelect : Long Company Name Inc. server1Info : Server1 server1Pic : 200330135637030000.jpg server2Info : Server2 server2Pic : 200330140821800000.jpg modemInfo : Aries modemPic : 200330140830497000.jpg routerInfo : Router rou
clientSelect : Long Company Name Inc.
server1Info : Server1
server1Pic : 200330135637030000.jpg
server2Info : Server2
server2Pic : 200330140821800000.jpg
modemInfo : Aries
modemPic : 200330140830497000.jpg
routerInfo : Router
routerPic : 200330140842144000.jpg
switchInfo : Switch1
switchGallery_media : 200330140859161000.jpg
buttonSubmit : Submit
::end::
这是一个字符串。它是通过sharepoint从sharepoint中提取的
lines = folder.get_file('main_equipment_list.txt')
lines = lines.replace(",", "")
for row in lines.split(","):
有东西要分开
替换行用于处理某些信息中的逗号,这些信息在拆分之前不应该存在
一切都很好,直到它分裂,然后我不能把它变成一个dict从那里
我试过了
d = dict(s.split(':') for s in lines)
print d
这让我抓狂
File "testShare.py", line 24, in <module>
d = dict(s.split(':') for s in row)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
我得到:
clientSelect : Long Company Name Inc.
server1Info : Server1
server1Pic : 200330135637030000.jpg
server2Info : Server2
server2Pic : 200330140821800000.jpg
modemInfo : Aries
modemPic : 200330140830497000.jpg
routerInfo : Router
routerPic : 200330140842144000.jpg
switchInfo : Switch1
switchGallery_media : 200330140859161000.jpg
buttonSubmit : Submit
::end::
['switchGallery_media ', ' 200330140859161000.jpg\r']
但如果我这样做:
for row in lines.split(","):
# print(row)
for s in row:
print(s[0])
我每行只有一个字符。如果我这样做了:
for row in lines.split(","):
# print(row)
for s in row:
print(s[1])
我得到一个超出范围的错误
编辑:
我回去重新开始。一切都很好,直到我试着把行分开。以下是有效的方法
lines = folder.get_file('main_equipment_list.txt')
lines = lines.rsplit("\n",2)[0]
d = {}
for line in lines.split("\n"):
if line.strip():
try:
k, v = map(str.strip, line.split(":"))
d[k] = v
except ValueError as ex:
print("on line" % (ex, line))
pass
print(d)
我认为出错的原因有很多。主要是我对python的不熟悉,还有空格/额外的字符把我搞得一团糟
我在做一些测试。如果我使用这个:
lines = lines.rsplit("\n",2)[0]
for line in lines.split("\n"):
if line.strip():
try:
x = line.split(":", 1)
print(x)
except ValueError as ex:
print("on line" % (ex, line))
pass
我得到:
clientSelect : Long Company Name Inc.
server1Info : Server1
server1Pic : 200330135637030000.jpg
server2Info : Server2
server2Pic : 200330140821800000.jpg
modemInfo : Aries
modemPic : 200330140830497000.jpg
routerInfo : Router
routerPic : 200330140842144000.jpg
switchInfo : Switch1
switchGallery_media : 200330140859161000.jpg
buttonSubmit : Submit
::end::
['switchGallery_media ', ' 200330140859161000.jpg\r']
无论哪种方式都有效,我更了解一些事情。感谢@RoadRunner提供有关显示错误的帮助和提示 s.split(“:”)
将为您提供一个包含两个或多个元素的数组。e、 g.[“客户选择”、“长公司名称公司”]
你必须从这个数组中选取元素来构造一个dict
d = {
splited[0]: splited[1]
}
在我的python shell中:
In [1]: s = "clientSelect : Long Company Name Inc."
In [2]: x = s.split(":")
In [3]: x
Out[3]: ['clientSelect ', ' Long Company Name Inc.']
In [4]: d = {x[0]: x[1]}
In [5]: d
Out[5]: {'clientSelect ': ' Long Company Name Inc.'}
s.split(“:”)
将为您提供一个包含两个或多个元素的数组。e、 g.[“客户选择”、“长公司名称公司”]
你必须从这个数组中选取元素来构造一个dict
d = {
splited[0]: splited[1]
}
在我的python shell中:
In [1]: s = "clientSelect : Long Company Name Inc."
In [2]: x = s.split(":")
In [3]: x
Out[3]: ['clientSelect ', ' Long Company Name Inc.']
In [4]: d = {x[0]: x[1]}
In [5]: d
Out[5]: {'clientSelect ': ' Long Company Name Inc.'}
出现此错误是因为正在拆分空换行符和文件末尾的
::end::
。拆分这些行将同时给出['\n']
和['','end','','','','',']
。字典是基于key:value
的,如果您给它更多或更少的项目来处理,它将引发ValueError
异常
您可以在shell中轻松复制此异常:
>>> x = ["1:2", "3:4"]
>>> dict(y.split(":") for y in x)
{'1': '2', '3': '4'}
>>> x = ["1:2", "3"]
>>> dict(y.split(":") for y in x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #1 has length 1; 2 is required
>>> x = ["1:2:3", "4:5:6"]
>>> dict(y.split(":") for y in x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
输出:
too many values to unpack (expected 2) occured on line: ::end::
{'clientSelect': 'Long Company Name Inc.', 'server1Info': 'Server1', 'server1Pic': '200330135637030000.jpg', 'server2Info': 'Server2', 'server2Pic': '200330140821800000.jpg', 'modemInfo': 'Aries', 'modemPic': '200330140830497000.jpg', 'routerInfo': 'Router', 'routerPic': '200330140842144000.jpg', 'switchInfo': 'Switch1', 'switchGallery_media': '200330140859161000.jpg', 'buttonSubmit': 'Submit'}
注意我如何打印异常以查看发生了什么。代码无法解包键和值对,因为它有两个以上的项要从
行解包。拆分(“:”
)。代码仍然创建了字典,但我记录了异常以查看实际发生的情况。这很方便查看您的代码哪里出错 出现此错误是因为您正在拆分空换行符和文件末尾的::end::
。拆分这些行将同时给出['\n']
和['','end','','','','',']
。字典是基于key:value
的,如果您给它更多或更少的项目来处理,它将引发ValueError
异常
您可以在shell中轻松复制此异常:
>>> x = ["1:2", "3:4"]
>>> dict(y.split(":") for y in x)
{'1': '2', '3': '4'}
>>> x = ["1:2", "3"]
>>> dict(y.split(":") for y in x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #1 has length 1; 2 is required
>>> x = ["1:2:3", "4:5:6"]
>>> dict(y.split(":") for y in x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
输出:
too many values to unpack (expected 2) occured on line: ::end::
{'clientSelect': 'Long Company Name Inc.', 'server1Info': 'Server1', 'server1Pic': '200330135637030000.jpg', 'server2Info': 'Server2', 'server2Pic': '200330140821800000.jpg', 'modemInfo': 'Aries', 'modemPic': '200330140830497000.jpg', 'routerInfo': 'Router', 'routerPic': '200330140842144000.jpg', 'switchInfo': 'Switch1', 'switchGallery_media': '200330140859161000.jpg', 'buttonSubmit': 'Submit'}
注意我如何打印异常以查看发生了什么。代码无法解包键和值对,因为它有两个以上的项要从
行解包。拆分(“:”
)。代码仍然创建了字典,但我记录了异常以查看实际发生的情况。这很方便查看您的代码哪里出错 在这种情况下,我发现编写for
-循环并使用try
-块查看哪些项导致错误是很有用的<代码>对于行中的s:try:dict(s.split(“:”)除了ValueError:print(s)
@jakub Ok,这样做,看起来它会分割每个字符。我在控制台中每行有1个字符,所以我的问题是为什么分隔符是“:”?您能提供一个最小的代码来重现您的问题吗?目前还完全不清楚最初的数据实际上是如何转换的。例如,您对行执行行=行。替换(“,”)
(意味着不再有,
),然后对行中的行执行。拆分(“,”)
(意味着拆分现在不存在的,
)是因为“某些信息中的某些逗号”(不在示例输入中),但不执行任何操作,然后,稍后显示行中的行的。拆分(“,”):打印(行)
复制初始数据。让我修复上面的代码。我意识到有变化。在这种情况下,我发现写下for
-循环并使用try
-块查看哪些项导致了错误是很有用的<代码>对于行中的s:try:dict(s.split(“:”)除了ValueError:print(s)
@jakub Ok,这样做,看起来它会分割每个字符。我在控制台中每行有1个字符,所以我的问题是为什么分隔符是“:”?您能提供一个最小的代码来重现您的问题吗?目前还完全不清楚最初的数据实际上是如何转换的。例如,您对行执行行=行。替换(“,”)
(意味着不再有,
),然后对行中的行执行。拆分(“,”)
(意味着拆分现在不存在的,
)是因为“某些信息中的某些逗号”(不在示例输入中),但不执行任何操作,然后,稍后显示行中的行的。拆分(“,”):打印(行)
复制初始数据。让我修复上面的代码。我意识到有变化。我明白了,但出于某种原因,它分裂了每一个字符。这就是它返回的内容。try…catch
的替代方法是检查数组长度是否为2,如果不匹配,则忽略字典创建。我明白了,但出于某种原因,它会拆分每个字符。这就是它返回的内容。try…catch
的替代方法是检查数组的长度是否为2,如果不匹配,则忽略字典创建。啊,好的。我想知道这是否是一个空白问题。让我试试。谢谢。@编辑帮了忙吗?好的。我去掉了::END::,删除了所有其他换行符。删除空白。管理我的公司