0

我是 python 新手,正在使用 2.7 版

我想使用填充该行其余部分的a 替换string文件内部。wild card这是我到目前为止...

这将起作用并将文件字符串更改为second string

if line == 'This = first string':
    line = 'This = second string'

这将不起作用,文件字符串将保持为first string

if line == 'This = *':
    line = 'This = second string'

完整脚本:

import sys
import shutil
import os
import re

#Assigns tf as a tmp file with the module for appending and writing, and creating the file if it does not exist.
tf = open('tmp', 'a+')

#Assigns f as test.txt
with open('test1.txt') as f:
#Reads the line in the test1.txt file
    for line in f.readlines():
#Checks for the line condition
        if line == 'This = *':
#Sets the new line condition
            line = 'This = second string'
#Replaces the line withe the new build path
        tf.write(line)
#Closes the test2.txt file
f.close()
tf.close()
#Copies the changes from the tmp file and replaces them into the test2.txt
shutil.copy('tmp', 'test2.txt')
#Removies the tmp file from the computer
os.remove('tmp')

JF 塞巴斯蒂安的最新代码

test2.txt 内容:

blah
This = first string

testing2.py 内容:

import os
from tempfile import NamedTemporaryFile

prefix = "This = "
path = 'test2.txt'  
dirpath = os.path.dirname(path)
with open(path) as input_file:
    with open(path+".tmp", mode="w") as tmp_file:
        for line in input_file:
            if line.startswith(prefix):
                line = prefix + "second string\n"
            tmp_file.write(line)
        tmp_file.delete = False
os.remove(path)
os.rename(tmp_file.name, path)

错误信息:

C:\Users\james>testing2.py
Traceback (most recent call last):
  File "C:\Users\james\testing2.py", line 13, in <module>
    tmp_file.delete = False
AttributeError: 'file' object has no attribute 'delete'

有什么建议么?

4

2 回答 2

1

要替换以前缀开头的行:

prefix = "This = "
if line.startswith(prefix):
    line = prefix + "second string"

如果文件是带有key = value行的配置文件,那么您还可以使用line.partition()方法、ConfigParser模块或正则表达式替换值(在更复杂的情况下):

import re
# ...
line = re.sub(r"^This\s*=.*$", "This = second string", line)

替换文件中的行;您可以使用fileinput模块或只写入临时文件(tempfile.NamedTemporaryFile)并在最后重命名

#!/usr/bin/env python
import os
from tempfile import NamedTemporaryFile

prefix = "This = "
path = 'test1.txt'  
dirpath = os.path.dirname(path)
with open(path) as input_file:
    with NamedTemporaryFile(mode="w", dir=dirpath) as tmp_file:
        for line in input_file:
            if line.startswith(prefix):
                line = prefix + "second string\n"
            tmp_file.write(line)
        tmp_file.delete = False
os.remove(path)
os.rename(tmp_file.name, path)
于 2013-04-08T02:42:27.540 回答
0

我终于找到了答案...

在 Nightly.py 执行之前的 test1.txt:

blah
blah
This is a first string
blah
blah

顺便说一句,标签在 notepad++ 的代码中有所不同

import sys
import os
import re
import shutil

tf = open('tmp', 'a+')

with open('test1.txt') as f:
    for line in f.readlines():
        build = re.sub ('This is.*','This is a second string',line)
        tf.write(build)
tf.close()
f.close()
shutil.copy('tmp', 'test1.txt')
os.remove('tmp')

Nightly.py 执行后的 test1.txt:

blah
blah
This is a second string
blah
blah
于 2013-04-12T06:06:51.927 回答