【问题标题】:how to create custom numbers list in python如何在python中创建自定义数字列表
【发布时间】:2021-07-28 10:40:58
【问题描述】:

我需要创建包含基于 python 中特定模式的自定义列表的 txt 文件,或者以任何方式更快的任何程序或程序语言使用 for 循环或任何循环我不能这样做,因为我想创建 639936 个文件示例来解释 txt包含这个的文件

1000001_0001
1000001_0002
1000001_0003
1000001_0004
1000001_0005
1000001_0006
1000001_0007
1000001_0008
--
--
--
1000001_9996
1000001_9997
1000001_9998
1000001_9999

1000002_0001
1000002_0002
1000002_0003
1000002_0004
--
--
--
1000002_9999

另一个文件更改只是从 1000001 循环到 9999999

9999999_0001
9999999_0002
9999999_0003
9999999_0004
--
--
--
9999999_9999

第一个数字开始 1000001 结束 9999999 另一个数字开始 0001 结束 9999 在那个下划线_之间 列出这个 1000001_0001 我想拆分文件以创建多个文件,因为太大了

for i in range(1000001,9999999):
for y in range(0,9999):
    cv = "{:07d}".format(i)
    vc = format(y)
    print (cv+"_"+vc)
    
    with open('1000001.txt','ab') as f:
        f.write(cv+"_"+vc+"\n")

【问题讨论】:

  • 明确一点...您要创建 639936 个不同的文件吗?您目前的代码(效率极低)会将所有内容写入一个文件
  • 不是 639936 个不同的文件,我想将文件溢出到 1000 个文件中......因为一个文件太大而无法编辑

标签: python window


【解决方案1】:

我假设您正在尝试编写多个文件,每个文件包含一组数字,其中 2 个部分由下划线分隔,并且在每个文件中您有一个固定的第一个数字并从0000 到 9999,不同的文件有不同的“第一个数字”,从 1000001 到 9999999。

如果您在 Python 中执行此操作,列表理解是您的朋友。使用列表推导,您可以使用单个命令创建具有任何模式的项目列表。

custom_list = ['1000001_' + str('%04d') % x for x in range(10000)]

# output: list of numbers as strings

代码说明:- 变量 x 从 0 循环到 9999 (10000-1)。在每次迭代中,x 值被传递到函数str() 以将整数转换为字符串格式(数字中不能有下划线,因此转换为字符串)。 '%04d' 通过在需要时在前面添加零来确保每个 x 值都是 4 位数字。然后将每个这样的字符串 ('0000', '0001', ...) 连接到第一个数字作为字符串。

您可以运行另一个循环来遍历第一个数字并将上面编写的循环放入其中,并使外部循环在每次迭代中将每个列表保存到一个新文件中(例如转换为 numpy 数组并使用 numpy.save) .如果您不想将这些数字保存到不同的文件中,您甚至可以将上述函数转换为嵌套列表推导式并制作一个 2D 列表。

欢呼!

编辑:(在 OP 的评论后添加代码)

如果您在运行此代码之前没有安装 numpy,请确保已安装。

# importing functions from numpy
from numpy import save

number_list = []
number_of_files = 1
for (index, i) in enumerate(range(1000001, 10000000)):
  small_list = [str(i) + '_' + str('%04d') % x for x in range(10000)]
  number_list += small_list

  # "save-test":
  # checking if number_list has enough elements for 1 file,
  # then saves it and empties the variable
  if (index + 1) % 9001 == 0:
    save('number_list' + str((index + 1) // 9001), number_list)
    number_list = []
    number_of_files += 1

# adding last file contents manually if it doesn't clear above "save-test"
if len(number_list) > 0:
  save('number_list' + str(number_of_files), number_list)

这将生成 1000 个文件,所有文件中都有 9001 * 10000 个值,除了最后一个,它包含的值数量较少。

我不知道你想用这段代码做什么,但这应该会给你在 cmets 中提到的结果。

【讨论】:

  • 我可以保存到 1000 个文件吗?
  • 是的。在这种情况下,您可以编写一个嵌套列表推导,然后将列表拆分为 1000 个列表,并使用循环将每个列表保存到不同的文件中(这将需要大量 RAM),或者在制作此列表时,当列表已为 1 个文件创建了足够的数据,您可以将该数据写入文件并清除列表,然后循环对其余文件执行此操作。
  • 你能写出完整的代码吗.. 帮帮我
  • 我已经编辑了我的答案并添加了完整的代码。它应该给你结果。如果有效,请接受它作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2015-11-16
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多