我有一个ID列表,我试图操纵以获得以下格式的长字符串:
"ID1,ID2,ID3,....,IDn".
,即一个长字符串,其中ID以逗号分隔,这也是字符串的一部分。
这里有一个问题:这些长字符串中的每一个字符串总长度不能超过1,000
个字符,因为我希望代码可以在任何list
字符上运行,我无法提前说出原始ID列表需要多少长度为1,000
的字符串。
所以,理想情况下,我希望有一个脚本来获取ID列表并生成以下形式的变量:
str1 = string of the first 1000 chars
str2 = string of the next 1000 chars
srt3 = string of the next 1000 chars
等等。
我该怎么做?如何根据需要随时生成变量?
我想过可能会在第一阶段生成一个长字符串,例如:
long_str = ""
for item in my_list:
long_str += str(item) + ","
def find_num_segments(x):
if x % 1000 == 0:
return x/1000
else:
return x/1000 + 1 # notice that if x < 1000, then x%1000 != 0 (actually == x). So it will fall under else. x<1000 / 1000 gives 0, so the function yields 0+1
num_segments = find_num_segments(long_str)
for i in range(num_segments):
starting_position = 0
print "str%d : " %i , num_segments[starting_position,starting_position+1000]
starting_position += 1000
但是,那是:
['014300070358Ful'], ['014300031032Uni']
。"TypeError: not all arguments converted during string formatting"
的第一行获得find_num_segments()
。编辑:我发现自己也没有产生正确的结果,因为我们无法保证身份证不会成为&#34; cut&#34;在中间。
如何创建一个逐个连接ID的功能和#34;停止&#34;在获得1000个字符标记之前,如果下一个ID不能完全适合,那么就开始新一批1000个字符?
如果有人想要帮助并且需要帮助,那么这里是sample list。
帮助将不胜感激!谢谢:))
答案 0 :(得分:1)
您应该使用列表。这更容易。你可以这样做:
string_list = []
然后,只要您需要添加变量,就可以执行string_list.append(value)
例如,如果你有一个id列表,你可以这样做:
id = []
id.append(ID)
您还可以轻松获取ID。比如说你想获得第五个id,你可以这样做:
id[4]
>>> id = []
>>> id.append(123)
>>> id.append(125)
>>> id.append(127)
>>> print id
[123,125,127]
>>> id[0]
123
>>> id[-1] #last element
127
您还可以搜索其中的元素:
>>> a.index(125)
1
[注]
如果你想在每1000个字符后分割一个字符串,只需执行:
id_list = [your_string[i:i+1000] for i in range(0,len(your_string),1000)]
答案 1 :(得分:0)
如果您真的想动态生成变量,可以这样做:
short_strings = [long_string[i:i+1000] for i in range(0, len(long_string), 1000)]
for i, short_string in enumerate(short_strings):
globals()['str{}'.format(i)] = short_string
修改强>
防止ids被切成两半:
i = 0
short_string = ''
for uid in uids:
if short_string:
if len(short_string) + len(uid) < 1000:
short_string += ','+uid
else:
globals()['str{}'.format(i)] = short_string
i += 1
short_string = uid
elif len(uid) <= 1000:
short_string = uid
else:
print('Unique ID is too long:', uid)