正在尝试连接两个单独的文件,但程序不起作用

2024-09-27 00:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

# join files interactively 
import os
def menu():
    print("welcome to file joiner")
    print()
    print("you will need to specify the original file name")
    filename  =input("Enter the original name:")
    return filename
def main():
    try:
        filename = menu()
        metaFile = filename + ".meta"

        infile = open(metaFile, "r")
        metaInfo = infile.readlines()
        splitsFilePrefix = metaInfo[0] + strip()
        bufferSize = metaInfo[1].strip()
        bufferSize = int(bufferSize)
        splits = metaInfo[2] + strip()
        splits = int(splits)

        try:
            os.remove("new" + filename)
        except:
                pass

        outfile = open("new" + filename, "ab")
        infile = open(splitsFilePrefix + str(0), "rb")
        buffer = infile.read(bufferSize)
        i = 0

        while len(buffer):
            outfile.write(buffer)
            print(".", end="")
            i = i+1
            if i == splits: 
                break
            splitsFilePrefix = metaInfo[0].strip()
            splitsFilePrefix = splitsFilePrefix + str(i)
            infile = open(splitsFilePrefix,"rb")
            buffer = infile.read(bufferSize)

        infile.close()
        outfile.close()
        print()
        print("Files rejoined, File name is :new" + filename)
    except:
         print("An error Occured")
main()            

Tags: namenewosdefbufferopenfilenameinfile
1条回答
网友
1楼 · 发布于 2024-09-27 00:18:51

你还没说出什么问题。如果我们不知道它应该做什么,没有人能帮助它按照它应该做的方式工作

  • 我浏览了一遍,寻找语法错误,没有看到任何错误

  • 我看到了+ str(0),想知道它是否只打开了第一个文件。结果它没有,它也打开了其他文件

  • 我看到了splitsFilePrefix = splitsFilePrefix + str(i),并认为它可能会生成文件名xyz1xyz12xyz123,但不是每次都通过重新读取元文件来处理的

  • 我看到了大的try: {everything} except: {error}代码,它将捕获每一条可能有用的错误消息,并将其替换为一条无用的错误消息。那没用

  • 我确定该计划的目的是:

give it a filename, it opens:
filename.meta

which is structured:

filename_prefix
buffer_size
number_of_parts

then loops through
filename_prefix0
filename_prefix1
filename_prefix..

and reinvents the wheel of `cat` and `copy` and puts all the contents in
newfilename

我看到了:

i = i+1
if i == splits: 
    break

并认为这可能是一个由一个错误,打破之前阅读最后一段。不,它计算的是0,1,2,而不是1,2,3,所以应该可以

我目前的猜测是:

    while len(buffer):

        buffer = infile.read(bufferSize)

在第一个文件的末尾,它将不读取任何内容,缓冲区将为空,循环将停止,并且不会继续处理任何剩余的文件

这是因为您不能重复读取一个文件,并在同一个循环中逐步遍历所有文件

重新设计如下:

outfile = open("new" + filename, "ab")

for i in range(splits):
    with open(splitsFilePrefix + str(i), 'rb') as infile:
        while len(buffer):
            outfile.write(buffer)
            print(".", end="")
            buffer = infile.read(bufferSize)

所有这些都未经测试,除了一些验证缓冲区的快速测试,所以ymmv

相关问题 更多 >

    热门问题