Python 疑问

48 天前
 Canglin
python 新手的一个小疑问:
with open(m4s_file_path, '+rb') as f:
file_read_cache = 1 * 1024 * 1024
file_size = f.seek(0, 2)
file_size = f.tell()
f.seek(0)
file = f.read(32)
if file[0:9] == b'000000000':
orglen = len(file)
file = re.sub(b'000000000|avc1', b'', file)
file = re.sub(b'$', b' ', file)

remove_orglen = orglen - len(file)
f.seek(32)
tail = f.read()
f.seek(0)
f.write(file + tail)
f.truncate(len(file) + len(tail) - remove_orglen)

sub_file = file[9:]
f.seek(0)
f.write(sub_file)

for i in range(file_read_cache, file_size,
file_read_cache):
chunks = f.read(file_read_cache)
f.seek(i)
f.write(chunks)

f.truncate(file_size - 9)
else:
pass
这是我写的一个小 Demo ,但是不知道为什么生成的合并文件种 file 与 tail 中间会有一个空格呢,该如何处理这个呢?
1063 次点击
所在节点    Python
7 条回复
clino
48 天前
贴给智谱清言给的回答:

在你的代码中,出现空格的原因是你在使用 re.sub 函数替换内容时,将 $ 字符替换为了空格 b' '。在正则表达式中,$ 是一个特殊字符,代表字符串的末尾。所以当 re.sub 函数看到 $ 时,它会查找字符串的末尾并进行替换。
这里有一个小错误,你可能想要替换的是 b'000000000' 而不是 b'000000000|$'。让我们来修正这部分代码:

后面还给了三个问题的建议修复代码示例
channg
48 天前
问 chatgpt 一下就给你回答了

file = re.sub(b'$', b' ', file)
这里,你的目的是在 file 的末尾添加一个空格,但实际上这会在每次处理时添加一个空格到处理过的内容里。由于你在后续的操作中又将 file 写回了文件,这就导致了你观察到的现象。

但是我不知道回答的对不对
Canglin
48 天前
@clino #1 我的目的是想将字符流种的 000000000 与 avcl 删除掉,然后将$字符换成空格,按您的意思我是不是应该将 file = re.sub(b'$', b' ', file)改为 file = re.sub(b'\$', b' ', file)?
Canglin
48 天前
@channg #2 我是按照 Claude 写的,困难
araraloren
48 天前
I can't answer you because the codes are encrypted.
noahlias
48 天前
我记得发帖的时候可以用 markdown 你这格式看着难受
Canglin
48 天前
@noahlias #6 可能是我浏览器的事情,我选的 MD ,但是不知道为什么出来是这个格式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX