为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中替换“.txt”文件的每行的第一个数字?

如何在python中替换“.txt”文件的每行的第一个数字?

holdtom 2022-08-11 20:22:58
查看此图像以获取示例.txt文件,在此文件的每一行上,我想将0替换为1,我也想保存具有相同名称的文件。查看此图像以获取示例.txt文件,在此文件的每一行上,我想将0替换为1,我也想保存具有相同名称的文件。my code:-这段代码正在工作,并给了我想要的结果。有人可以建议一种更简单的方法吗?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')))))            with open('{}' .format(filename), 'w') as file_out:                file_out.write(new_data)
查看完整描述

5 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

只是对@Itachi的答案的更正,这对我有用。

find . -type f -name "*.txt" | xargs -I{} sed -i 's/0/1/' {}


查看完整回答
反对 回复 2022-08-11
?
明月笑刀无情

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()


查看完整回答
反对 回复 2022-08-11
?
SMILET

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")

我认为代码非常简单,但如果你想让我解释,请告诉我。


查看完整回答
反对 回复 2022-08-11
?
温温酱

TA贡献1752条经验 获得超4个赞

TLDR:

find . -type f -name "*.txt" | xargs -I{} sed -i '' 's/0/1/' {}

详细:

步骤:

  1. 查找所有目标文件:。find . -type f -name "*.txt"

  2. sed是一把瑞士刀,用于替换指定文件的字符串,正则表达式参数与第一个匹配项匹配,并根据需要将其替换为 ,表示覆盖原始文件。's/0/1/'01-i ''

  3. xargs用于将文件结果解析为每个文件,并以递归方式将其作为 stdin 传递给。sed

做! 命令做这些类型的任务很棒!shell

顺便说一句,欢迎来到堆栈溢出!


查看完整回答
反对 回复 2022-08-11
?
胡子哥哥

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)


查看完整回答
反对 回复 2022-08-11
  • 5 回答
  • 0 关注
  • 398 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信