5 回答
TA贡献1860条经验 获得超9个赞
只是对@Itachi的答案的更正,这对我有用。
find . -type f -name "*.txt" | xargs -I{} sed -i 's/0/1/' {}
TA贡献1828条经验 获得超4个赞
import os
import re
for filename in os.listdir(os.getcwd()):
if filename.endswith(".txt"):
with open('{}'.format(filename), 'r+') as file:
data = file.read()
new_data = re.sub(r'^0','1',data,flags=re.MULTILINE)
file.seek(0)
file.truncate()
file.write(new_data)
file.close()
TA贡献1796条经验 获得超4个赞
import os
for filename in os.listdir(os.getcwd()):
if filename.endswith(".txt"):
with open('{}' .format(filename), 'r+') as file:
lines = file.readlines()
file.seek(0, 0) #set the pointer to 0,0 cordinate of file
for line in lines:
row = line.strip().split(" ")
if not int(row[0]):
row[0] = '1'
print(row)
file.write(" ".join(row) + "\n")
我认为代码非常简单,但如果你想让我解释,请告诉我。
TA贡献1752条经验 获得超4个赞
TLDR:
find . -type f -name "*.txt" | xargs -I{} sed -i '' 's/0/1/' {}
详细:
步骤:
查找所有目标文件:。
find . -type f -name "*.txt"
sed
是一把瑞士刀,用于替换指定文件的字符串,正则表达式参数与第一个匹配项匹配,并根据需要将其替换为 ,表示覆盖原始文件。's/0/1/'
0
1
-i ''
xargs
用于将文件结果解析为每个文件,并以递归方式将其作为 stdin 传递给。sed
做! 命令做这些类型的任务很棒!shell
顺便说一句,欢迎来到堆栈溢出!
TA贡献1825条经验 获得超6个赞
您可以使用“r +”打开文件以一次性读取和写入。
import os
def process_line_item(x):
index = x[0]
line_str = x[1]
new_first_value = [str(1)]
return ' '.join(new_first_value + x[1].split(' ')[1:])
for filename in os.listdir(os.getcwd()):
if filename.endswith(".txt"):
data = None
with open('{}'.format(filename), 'r+') as file:
data = file.read()
new_data = '\n'.join(list(map(process_line_item, enumerate(data.split('\n')))))
file.write(new_data)
添加回答
举报