Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何附加二进制文件?_Python_Python 3.x - Fatal编程技术网

Python 如何附加二进制文件?

Python 如何附加二进制文件?,python,python-3.x,Python,Python 3.x,这个问题与欧拉计划有关,问题10:将所有素数相加到200万以下。在我使用正确的算法之前,程序非常慢,所以我决定将它找到的素数批量写入数据文件。现在我有了正确的主算法,但原则上我想知道如何附加数据文件 #Project Euler 10a: list primes below 2,000,000. import pickle def numprime(x): for i in range(2, int(x**0.5)+1): if x % i == 0:

这个问题与欧拉计划有关,问题10:将所有素数相加到200万以下。在我使用正确的算法之前,程序非常慢,所以我决定将它找到的素数批量写入数据文件。现在我有了正确的主算法,但原则上我想知道如何附加数据文件

#Project Euler 10a: list primes below 2,000,000.

import pickle

def numprime(x):
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            return False
    else:
        return True

def growfile(primes, faccess):
    file = open('primelist2kk.dat', faccess)
    pickle.dump(primes, file)
    file.close()

def main(fchunk, faccess):
    #File input broken up for memory
    for i in range(10):
        plist = []
        for j in range(1, fchunk, 2):
            k = fchunk*i + j
            if numprime(k):
                plist.append(k)
        if i == 0:
            plist.pop(0)
            plist.insert(0,2)
        print()
        print(plist)
        growfile(plist, faccess)

def viewfile(faccess):
    g = open('primelist2kk.dat', faccess)  
    h = pickle.load(g)
    g.close()
    print(h)
    g.closed


#Supply 1/10 of the prime upper bound
#main(200, 'ab')
viewfile('rb')
我已经尝试了我能想到的所有不同的文件访问代码的合理组合,但没有任何效果。后续数据块要么删除第一个数据块,要么根本不保存。有什么想法吗


NB Unhash main()创建文件并显示程序输出。哈希main()和unhash viewfile()以查看文件。

您需要附加模式。即

faccess = 'ab'
旁白:这是一种快速生成素数的方法

筛子示例

N = range(2000000)
P = []
for i in N:
    if i > 1:
        P.append(i)
        N[::i] = [0]*((len(N)+i-1)//i)

print P

您需要附加模式。即

faccess = 'ab'
旁白:这是一种快速生成素数的方法

筛子示例

N = range(2000000)
P = []
for i in N:
    if i > 1:
        P.append(i)
        N[::i] = [0]*((len(N)+i-1)//i)

print P

您需要附加模式。即

faccess = 'ab'
旁白:这是一种快速生成素数的方法

筛子示例

N = range(2000000)
P = []
for i in N:
    if i > 1:
        P.append(i)
        N[::i] = [0]*((len(N)+i-1)//i)

print P

您需要附加模式。即

faccess = 'ab'
旁白:这是一种快速生成素数的方法

筛子示例

N = range(2000000)
P = []
for i in N:
    if i > 1:
        P.append(i)
        N[::i] = [0]*((len(N)+i-1)//i)

print P

您需要使用附加模式(
ab
)更新文件,但这还不够。由pickle.dump写入的每个二进制数据块都是独立的。当你对打开阅读的文件执行pickle.load时,你只会得到第一个。您需要执行一个循环并继续加载数据,直到没有剩余数据为止

def viewfile():
    with open('primelist2kk.dat', 'rb') as g:
        try:
            while True: # run until there's an exception
                h = pickle.load(g)
                print(h)
        except EOFError: # this will be raised by load() when there's no more data
            pass

如果您不希望每个卡盘单独打印,您可以将它们合并到一个列表中。

您需要使用附加模式(
ab
)更新文件,但这还不够。由pickle.dump写入的每个二进制数据块都是独立的。当你对打开阅读的文件执行pickle.load时,你只会得到第一个。您需要执行一个循环并继续加载数据,直到没有剩余数据为止

def viewfile():
    with open('primelist2kk.dat', 'rb') as g:
        try:
            while True: # run until there's an exception
                h = pickle.load(g)
                print(h)
        except EOFError: # this will be raised by load() when there's no more data
            pass

如果您不希望每个卡盘单独打印,您可以将它们合并到一个列表中。

您需要使用附加模式(
ab
)更新文件,但这还不够。由pickle.dump写入的每个二进制数据块都是独立的。当你对打开阅读的文件执行pickle.load时,你只会得到第一个。您需要执行一个循环并继续加载数据,直到没有剩余数据为止

def viewfile():
    with open('primelist2kk.dat', 'rb') as g:
        try:
            while True: # run until there's an exception
                h = pickle.load(g)
                print(h)
        except EOFError: # this will be raised by load() when there's no more data
            pass

如果您不希望每个卡盘单独打印,您可以将它们合并到一个列表中。

您需要使用附加模式(
ab
)更新文件,但这还不够。由pickle.dump写入的每个二进制数据块都是独立的。当你对打开阅读的文件执行pickle.load时,你只会得到第一个。您需要执行一个循环并继续加载数据,直到没有剩余数据为止

def viewfile():
    with open('primelist2kk.dat', 'rb') as g:
        try:
            while True: # run until there's an exception
                h = pickle.load(g)
                print(h)
        except EOFError: # this will be raised by load() when there's no more data
            pass

如果您不希望每个卡盘单独打印,您可以将它们合并到一个列表中。

除非程序以错误的方式读取文件,否则该列表不起作用。“谢谢你的旁白。”马尔科先生,可能你读错了。你能显示更新后的代码吗?代码没有改变。Viewfile仅打印出第一块数据。如果有人获得了保存和打印所有预期数据的代码,请这样说!是的,您需要为每个块执行
pickle.load()
,因为@Blckknght建议这是一个不起作用的块,除非程序以错误的方式读取文件。“谢谢你的旁白。”马尔科先生,可能你读错了。你能显示更新后的代码吗?代码没有改变。Viewfile仅打印出第一块数据。如果有人获得了保存和打印所有预期数据的代码,请这样说!是的,您需要为每个块执行
pickle.load()
,因为@Blckknght建议这是一个不起作用的块,除非程序以错误的方式读取文件。“谢谢你的旁白。”马尔科先生,可能你读错了。你能显示更新后的代码吗?代码没有改变。Viewfile仅打印出第一块数据。如果有人获得了保存和打印所有预期数据的代码,请这样说!是的,您需要为每个块执行
pickle.load()
,因为@Blckknght建议这是一个不起作用的块,除非程序以错误的方式读取文件。“谢谢你的旁白。”马尔科先生,可能你读错了。你能显示更新后的代码吗?代码没有改变。Viewfile仅打印出第一块数据。如果有人获得了保存和打印所有预期数据的代码,请这样说!是的,您需要按照@Blckknght的建议为每个块执行
pickle.load()