Python 生成数字列表

Python 生成数字列表,python,csv,range,xrange,Python,Csv,Range,Xrange,嗨,我想生成从1000000到2000000的数字列表,但问题是我得到了一个错误记忆错误,我使用的是随机的,一切都很好,只是我得到了可疑的数字,我不能有重复的数字,所以我切换到xrange data = [] total = 2000000 def resource_file(info): with open(info, "r") as data_file: reader = csv_reader(data_file, delimiter=",") for

嗨,我想生成从1000000到2000000的数字列表,但问题是我得到了一个错误记忆错误,我使用的是随机的,一切都很好,只是我得到了可疑的数字,我不能有重复的数字,所以我切换到xrange

data = []
total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        for row in reader:
            try:
                for i in xrange(1000000,total):
                    new_row = [row[0], row[1], i]
                    data.append(new_row)
            except IndexError as error:
                print(error)
    with open(work_dir + "new_data.csv", "w") as new_data:
        writer = csv_writer(new_data, delimiter=",")
        for new_row in data:
            writer.writerow(new_row)
每行重复一次,增加一列,范围为1M..2M 问题是您首先将所有这些配置存储在内存中。首先,Python并没有一个非常高效的内存模型,而且每行一百万个条目还是相当大的

我建议不要将数据存储在列表中,只需立即将其写入文件:

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            for row in reader:
                rowa, rowb = row[0:2]
                for data in xrange(1000000,total):
                    writer.writerow([rowa,rowb,data])
在文件的1M-2M处取行 如果您想将原始文件的行数从1M到2M,您可以将其写成:

from itertools import islice

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            for row in islice(reader,1000000,total):
                writer.writerow(row)
或者你可以简化它,就像@JonClemens所说的那样,使用:

from itertools import islice

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            writer.writerows(islice(reader,1000000,total))
从itertools导入islice
总数=2000000
def资源_文件(信息):
打开(信息,“r”)作为数据文件:
reader=csv_读取器(数据_文件,分隔符=“,”)
将open(work_dir+“new_data.csv”,“w”)作为新的_数据:
writer=csv_writer(新的_数据,分隔符=“,”)
writer.writerows(islice(reader,1000000,total))
重复每一行,增加一列,范围为1M..2M 问题是您首先将所有这些配置存储在内存中。首先,Python并没有一个非常高效的内存模型,而且每行一百万个条目还是相当大的

我建议不要将数据存储在列表中,只需立即将其写入文件:

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            for row in reader:
                rowa, rowb = row[0:2]
                for data in xrange(1000000,total):
                    writer.writerow([rowa,rowb,data])
在文件的1M-2M处取行 如果您想将原始文件的行数从1M到2M,您可以将其写成:

from itertools import islice

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            for row in islice(reader,1000000,total):
                writer.writerow(row)
或者你可以简化它,就像@JonClemens所说的那样,使用:

from itertools import islice

total = 2000000
def resource_file(info):
    with open(info, "r") as data_file:
        reader = csv_reader(data_file, delimiter=",")
        with open(work_dir + "new_data.csv", "w") as new_data:
            writer = csv_writer(new_data, delimiter=",")
            writer.writerows(islice(reader,1000000,total))
从itertools导入islice
总数=2000000
def资源_文件(信息):
打开(信息,“r”)作为数据文件:
reader=csv_读取器(数据_文件,分隔符=“,”)
将open(work_dir+“new_data.csv”,“w”)作为新的_数据:
writer=csv_writer(新的_数据,分隔符=“,”)

writer.writerows(islice(reader,1000000,total))
您试图在写入任何内容之前将整个内容存储在内存中。通过一次只处理一行,而不是尝试将整个文件存储在内存中,可以使用更少的内存。是否确实要创建比输入CSV文件中的元素多1000000倍的元素?期望的结果是什么?你能给出一个CSV文件的小例子,以及你期望得到的CSV文件是什么样子的吗?我想为CSV文件的第2行中的每一行添加一个数字。在写入任何内容之前,你试图将整个内容存储在内存中。通过一次只处理一行,而不是尝试将整个文件存储在内存中,可以使用更少的内存。是否确实要创建比输入CSV文件中的元素多1000000倍的元素?期望的结果是什么?你能给出一个CSV文件的小例子,以及你期望得到的CSV文件是什么样子的吗?我想在第2行中为CSV文件中的每一行添加一个数字,但我认为是这样的rowa,rowb将在循环右侧之外是,但信息文件中的每一行都将被循环=总数2000000@Mike:那么您只需要原始文件的1M-2M行?
data
在这里做什么?循环计数器?数据是范围开始的数字和结束的位置,正如您现在看到的,每行循环2000000['fjc7kr1m92su8eljhb1184kwz.net','post dga(恶意软件)'1032067]['fjc7kr1m92su8eljhb1184kwz.net','post dga(恶意软件)'1032068]['fjc7kr1m92su8eljhb1184kwz.net','post dga(恶意软件)'1032069]['fjc7kr1m92su8eljhb1184kwz.net','post-dga(恶意软件)'1032070]['fjc7kr1m92su8eljhb1184kwz.net','post-dga(恶意软件)'1032071]@迈克:那么就没有理由写这样的范围函数了。请看编辑,第二种解决方案。但我认为这样一来,rowa,rowb将在循环之外。是的,但信息文件中的每一行都将循环=总数2000000@Mike:那么您只需要原始文件的1M-2M行?这里的
data
在做什么?一个循环ter?数据是范围开始的数字和结束的位置,正如您现在看到的,每行循环2000000['FJC7KR1M92SU8ELJHB1184KWZ.net','post dga(恶意软件)'1032067]['FJC7KR1M92SU8ELJHB1184KWZ.net','post dga(恶意软件)'1032068]['FJC7KR1M92SU8ELJHB1184KWZ.net','post dga(恶意软件)'1032069]['fjc7kr1m92su8eljhb1184kwz.net','post-dga(恶意软件)'1032070]['fjc7kr1m92su8eljhb1184kwz.net','post-dga(恶意软件)'1032071]@Mike:那么就没有理由编写这样的范围函数了。请参阅编辑,第二种解决方案。