是肥宅SRP啊 发表于 2023-5-3 19:44:46

python爬取下载电影

想问一下我在合并ts文件这步哪里出现了问题,跑出来是乱码而且也得不到合并后的文件(代码如下,完整文件代码在附件)
#开始合并TS文件形成一个完整的电影
def merge():
    file_names=[]
    with open("ts_file.txt",mode="r",encoding="utf-8") as f:
      for l in f:
            if l.startswith("#"):
                continue
            else:
                file_name = l.split('/')[-1].strip("\n")
                file_names.append(file_name)
      # print(file_names)
      now_dir = os.getcwd()
      os.chdir('./ts_s/')
      temp = []
      n = 1
      for i in range(len(file_names)):
            name = file_names
            temp.append(name)
            if i != 0 and i % 100 == 0:
                names ="+".join(temp)
                os.system(f'copy /b {names} {n}.ts')
                n = n+1
                temp=[]
            else:
                continue
      names = "+".join(temp)
      os.system(f'copy /b {names} {n}.ts')
      n = n + 1

      temp_2 = []
      for i in range(1,n+1):
            temp_2.append(f'{i}.ts')
            files = "+".join(temp_2)
            os.system(f'copy /b {files} 素媛.mp4')
      os.chdir(now_dir)
      print("welcome to my wanderland!")

isdkz 发表于 2023-5-3 19:44:47

这段代码的主要问题在于你使用了 Windows 的copy /b命令来合并文件。Python 脚本应该是跨平台的,所以我们可以用 Python 自带的文件操作来实现合并功能。另外,注意在合并所有分段文件之前,先合并每100个分段文件的操作可能是多余的。你可以尝试以下修改后的代码:

import os

# 开始合并TS文件形成一个完整的电影
def merge():
    file_names = []
    with open("ts_file.txt", mode="r", encoding="utf-8") as f:
      for l in f:
            if l.startswith("#"):
                continue
            else:
                file_name = l.split('/')[-1].strip("\n")
                file_names.append(file_name)
      # print(file_names)

    now_dir = os.getcwd()
    os.chdir('./ts_s/')

    with open('素媛.mp4', 'wb') as output:
      for name in file_names:
            with open(name, 'rb') as input:
                output.write(input.read())

    os.chdir(now_dir)
    print("welcome to my wanderland!")


这个修改后的代码使用了 Python 的open()函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows 上。现在这段代码应该能够正确合并所有的 TS 文件,并将它们存储到一个名为 '素媛.mp4' 的文件中。

陶远航 发表于 2023-5-3 19:45:29

您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得不到合并后的文件。根据您提供的完整代码,猜测问题可能出在文件编码上,建议修改以下这行代码: with open("ts_file.txt",mode="r",encoding="utf-8") as f: 将其中的"utf-8"修改为 GBK 或者 utf-8-sig(根据您的电脑配置不同而不同),尝试重新运行代码。另外也需要注意,文件路径中的'/'应该改为'\',否则可能会导致程序找不到文件。希望我的回答能帮到您!

是肥宅SRP啊 发表于 2023-5-3 20:04:41

isdkz 发表于 2023-5-3 19:46
这段代码的主要问题在于你使用了 Windows 的copy /b命令来合并文件。Python 脚本应该是跨平台的,所以 ...

谢谢你,你的代码是可行的。但是我有一点想知道为什么我原来的不行,我的系统是windows,问题是出在哪了呢{:10_266:}

是肥宅SRP啊 发表于 2023-5-3 20:10:03

isdkz 发表于 2023-5-3 19:46
这段代码的主要问题在于你使用了 Windows 的copy /b命令来合并文件。Python 脚本应该是跨平台的,所以 ...

哦!好像确实是上边那位老师说的问题!

是肥宅SRP啊 发表于 2023-5-3 20:14:56

陶远航 发表于 2023-5-3 19:45
您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得 ...

谢谢你!我把utf-8改了之后就可以正常的运行.我还有一个小问题就是,我在前面打开这个文件进行所有ts文件下载的时候使用的编码方式也是utf-8,那时候就没有问题,想问一下为什么会出现这样的差异呢?

是肥宅SRP啊 发表于 2023-5-3 20:25:04

陶远航 发表于 2023-5-3 19:45
您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得 ...

欧不对,应该不是编码的问题,我发现了我代码的一个小错误,前面在进行ts文件命名的时候后缀重复了两次,然后我在这部分ts文件合并的时候是按照没有重复后缀去查找的,所以查找不到导致没有任何合并文件的出现。把上述问题修改过后是能够正常的进行合并下载的,谢谢你的回复!
页: [1]
查看完整版本: python爬取下载电影