Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换“a”中每行的第一个数字;。txt";python中的文件?_Python_Python 3.x_File_Replace - Fatal编程技术网

如何替换“a”中每行的第一个数字;。txt";python中的文件?

如何替换“a”中每行的第一个数字;。txt";python中的文件?,python,python-3.x,file,replace,Python,Python 3.x,File,Replace,如何替换python中具有多个.txt文件的文件夹中.txt文件每行的第一个数字。另外,我想在替换后保留相同的文件名 my code:- 这段代码正在运行,给了我想要的结果。有人能提出一个更简单的方法吗 导入操作系统 def流程行项目(x): 索引=x[0] 行_str=x[1] 新的第一个值=[str(1)] 返回“”。加入(新的第一个值+x[1]。拆分(“”)[1:] 对于os.listdir(os.getcwd())中的文件名: 如果filename.endswith(“.txt”):

如何替换python中具有多个.txt文件的文件夹中.txt文件每行的第一个数字。另外,我想在替换后保留相同的文件名

my code:-
这段代码正在运行,给了我想要的结果。有人能提出一个更简单的方法吗

导入操作系统
def流程行项目(x):
索引=x[0]
行_str=x[1]
新的第一个值=[str(1)]
返回“”。加入(新的第一个值+x[1]。拆分(“”)[1:]
对于os.listdir(os.getcwd())中的文件名:
如果filename.endswith(“.txt”):
数据=无
以open({}.format(filename),'r')作为文件:
data=file.read()
new_data='\n'.join(列表(映射(进程行)项,枚举(data.split('\n''))))
将open({}.format(filename),'w')作为文件输出:
文件输出。写入(新数据)
您可以使用“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)
我认为代码非常简单,但如果您想让我解释,请让我知道。

TLDR:

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

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

  • 查找所有目标文件:
    Find-键入f-名称“*.txt”
  • sed
    是一把瑞士刀,用于替换指定文件的字符串,regex参数
    's/0/1/'
    匹配第一次出现的
    0
    ,并将其替换为
    1
    ,如您所愿,
    -i'
    意味着覆盖原始文件
  • xargs
    用于将文件结果解析为每个文件,并将其作为stdin递归传递给
    sed
  • 完成了<代码>shell命令可以很好地完成这些任务


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

    文件是否太大?否,在我的文件夹中有200个文件,其中包含100jpeg和100txt文件。所以所有的.txt文件都有各自的.jpeg文件的图像坐标。我只想替换txt文件每行的第一个数字0。所有100个txt文件都是一样的,不改变txt文件的名称。请查看我在问题中给出的图像链接。它只是结合了在一个语句中打开文件。您的代码很好,但它有一个问题,它没有覆盖我的文件,而是将新的先前结果与新的结果连接起来。对于ex:-0 1.2 1.3 3.4 4.5,应将其更改为1 1.2 1.3 3.4 4.5,但您的代码保留以前的值,并在新行中写入所需的结果。它已随机工作。有些文件被替换为1,有些则没有。它还显示了错误:-if not int(row[0]):ValueError:invalid literal for int()和base 10ok,请粘贴未转换文件的示例。此代码假定所有文件的所有行中0之前没有空格,并且文件中的每一行必须以0开头,而不是以0开头。0@Shubham-Singh此错误“if not int”(行[0]):ValueError:当行不以0开头时,将显示以10为基数的int()的无效文字。可能还有一些空间。
    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()