我的文件夹中包含大约70000个文本文件,其中包含5列组成的表,例如:
7 0.1 0.2 0.007 0.000077
7 0.6 0.8888 0.9 0.07
3 0.8 0.09999 0.87 0.6544444
1 0.0009 0.09 0.999 0.777777
6 0.2 0.333 0.222 0.33333
我想将第一列中的数字“ 7”替换为“ 5”。为此,我编写了以下代码来读取文件夹中的文本文件,并将整个文本文件中的7更改为5。
我的问题是如何将其仅应用于第一列而不是整个文本文件?
import glob
for filepath in glob.iglob('path to folder/*.txt', recursive=True):
with open(filepath) as file:
s = file.read()
s = s.replace('7', '5')
with open(filepath, "w") as file:
file.write(s)
该fileinput
模块具有一个方便的inplace
关键字参数。
from fileinput import input as fileinput
import glob
with fileinput(files=glob.iglob('path to folder/*.txt', recursive=True), inplace=True) as f:
for line in f:
fields = line.split('\t')
if fields[0] == '7':
line = '\t'.join(['5'] + fields[1:])
print(line, end='')
inplace=True
除非您确信自己可以正常工作,否则请尝试一下。
我只是假设您的列用制表符分隔;使其适应空格分隔或简单地使用不同的分隔符(如逗号等)应该不太困难。(如果您输入的是正确的CSV,则可以改用Python的csv
模块。)
我还假设您只想更改7
为,5
而不要更改777
为555
。如果您想要的话,也许只是
# ...
fields[0] = fields[0].replace('7', '5')
line = '\t'.join(fields)
# ...
如果您的列之间被不可预测的空格分隔,但是替换时字段长度没有改变(例如,此处用单个字符替换单个字符),则可以使用
fields = line.split()
fields[0] = fields[0].replace('7', '5')
line = fields[0] + line[len(fields[0]):]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句