在python中根据需要动态创建变量

时间:2014-04-07 08:53:28

标签: python string variables dynamic iterator

我有一个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

但是,那是:

  1. 丑陋而且可能是unpythonic。
  2. 没有产生干净的结果,因为有&#34;格式化剩菜&#34;例如括号和引号 - ['014300070358Ful'], ['014300031032Uni']
  3. 实际上没有工作:)我在"TypeError: not all arguments converted during string formatting"的第一行获得find_num_segments()

  4. 编辑:我发现自己也没有产生正确的结果,因为我们无法保证身份证不会成为&#34; cut&#34;在中间。

    如何创建一个逐个连接ID的功能和#34;停止&#34;在获得1000个字符标记之前,如果下一个ID不能完全适合,那么就开始新一批1000个字符?


    如果有人想要帮助并且需要帮助,那么这里是sample list

    帮助将不胜感激!谢谢:))

2 个答案:

答案 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)