gpt4 book ai didi

python - 在Python中分割一行;只取前 4 个值

转载 作者:行者123 更新时间:2023-12-01 09:34:02 26 4
gpt4 key购买 nike

我制作了一个脚本,将一个长文件分割成多个小文件。当恰好有 4 个整数时,它总是 split 。我想通过声明正好有 4 个整数但仅在行的开头来改进它。

示例输入

1020                                                                                                                                                                                                                                                            
200123242151111231 bla bla bla
200123331231231441 bla bla bla
1030
200123242151111231 bla bla bla
200123331231231441 bla bla bla

希望输出的是上面的内容拆分为:

200123242151111231                                 bla             bla                                       bla
200123331231231441 bla bla bla

200123242151111231                                 bla             bla                                       bla
200123331231231441 bla bla bla

当 bla 的其中一个值是 4 个整数时,它会添加一个额外的分割。如何确保 re.split 函数仅检查一行的前 4 个或 5 个值。

import re

file = open('testnew.txt', 'r')

i=0
for x in re.split(r"\b[0-9]{4}\s+", file.read()):
f = open('%d.txt' %i,'w')
f.write(x)
f.close()
print (x,i)
i = i+1

最佳答案

逐行读取文件可能会更好。这样,如果文件太大,您就不会遇到内存重载的问题,而且您还可以对行本身运行 4 位数字检查,而不会出现尴尬的分割。

doc = 0
towrite = ""
with open("somefile.txt", "r") as f:
for i, line in enumerate(f):
if len(line.strip()) == 4 and line.strip().isdigit():
if i > 0: # write txt from prior parse
wfile = open("{}.txt".format(doc), "w")
wfile.write(towrite)
wfile.close()
doc = line.strip()
towrite = "" # reset
else:
towrite += line
wfile = open("{}.txt".format(doc), "w")
wfile.write(towrite)
wfile.close()

测试文件:

1234
43267583291483 1234 3213213
57489367483929 32133248 3728913
3267
32163721837362 4723 3291832
42189323471911 321113 3211111132
326189183828327 3218484828283 828238281
21838282387 3726173 6278
1111
1236274818 327813678
32167382167894829013 321

结果:

1234.txt

43267583291483 1234 3213213
57489367483929 32133248 3728913

3267.txt

32163721837362 4723 3291832
42189323471911 321113 3211111132
326189183828327 3218484828283 828238281
21838282387 3726173 6278

1111.txt

1236274818 327813678
32167382167894829013 321

关于python - 在Python中分割一行;只取前 4 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49691154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com