我有一个表单的参数文件
parameter-name parameter-value
Run Code Online (Sandbox Code Playgroud)
参数可以按任何顺序排列,但每行只有一个参数.我想用一个新值替换一个参数的参数值.
我正在使用之前发布的行替换函数(在Python中搜索并替换文件中的一行)来替换使用python的string.replace(pattern,subst)的行.我正在使用的正则表达式在vim中工作,但似乎不能在string.replace中工作.这是我正在使用的正则表达式:
line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))
Run Code Online (Sandbox Code Playgroud)
其中interfaceOpDataFile是我要替换的参数名称(/ i表示不区分大小写),新参数值是fileIn变量的内容.有没有办法让python识别这个正则表达式,否则还有另一种方法可以完成这个任务吗?
假设您有三个通过上下文管理器获取的对象,例如A锁,数据库连接和ip套接字.您可以通过以下方式获取它
with lock:
with db_con:
with socket:
#do stuff
Run Code Online (Sandbox Code Playgroud)
但有没有办法在一个街区内完成?就像是
with lock,db_con,socket:
#do stuff
Run Code Online (Sandbox Code Playgroud)
此外,如果有一组具有上下文管理器的未知长度的对象,是否有可能以某种方式做到:
a=[lock1, lock2, lock3, db_con1, socket, db_con2]
with a as res:
#now all objects in array are acquired
Run Code Online (Sandbox Code Playgroud)
如果答案是"不",是不是因为需要这样的功能意味着设计不好,或者我应该建议它?:-P
假设我有一个包含以下内容的文本文件:
Dan
Warrior
500
1
0
Run Code Online (Sandbox Code Playgroud)
有没有办法可以编辑该文本文件中的特定行?现在我有这个:
#!/usr/bin/env python
import io
myfile = open('stats.txt', 'r')
dan = myfile.readline()
print dan
print "Your name: " + dan.split('\n')[0]
try:
myfile = open('stats.txt', 'a')
myfile.writelines('Mage')[1]
except IOError:
myfile.close()
finally:
myfile.close()
Run Code Online (Sandbox Code Playgroud)
是的,我知道这myfile.writelines('Mage')[1]是不正确的.但是你明白了我的观点吧?我正在尝试用Mage替换Warrior来编辑第2行.但我甚至可以这样做吗?
有没有办法做到这一点?假设我有一个文件列表,其名称如下:
如何在第x行(在本例中为3)插入第三个名称"Charlie",并自动将所有其他名称下移一行?我见过这样的其他问题,但他们没有得到有用的答案.可以这样做,最好是用方法还是循环?
今天我在想一个我在一年前写的Python项目,我用logging得非常广泛.我记得由于开销(hotshot表明它是我最大的瓶颈之一),必须在类似内循环的场景(90%代码)中注释掉大量的日志调用.
我现在想知道是否有一些规范的方法可以在Python应用程序中以编程方式去除日志记录调用,而无需一直注释和取消注释.我认为您可以使用检查/重新编译或字节码操作来执行此类操作,并仅针对导致瓶颈的代码对象.这样,您可以添加操纵器作为后编译步骤并使用集中配置文件,如下所示:
[Leave ERROR and above]
my_module.SomeClass.method_with_lots_of_warn_calls
[Leave WARN and above]
my_module.SomeOtherClass.method_with_lots_of_info_calls
[Leave INFO and above]
my_module.SomeWeirdClass.method_with_lots_of_debug_calls
Run Code Online (Sandbox Code Playgroud)
当然,您希望谨慎使用它,并且可能只使用每个函数的粒度 - 仅适用于已显示logging为瓶颈的代码对象.有人知道这样的事吗?
注意:由于动态类型和后期绑定,有一些因素使性能更难以执行.例如,对命名方法的任何调用都debug可能必须用if not isinstance(log, Logger).在任何情况下,我都假设所有的细节都可以通过绅士的协议或一些运行时检查来克服.:-)
我有下面的脚本,它修改hrefHTML文件中的属性(将来,它将是目录中的HTML文件列表).使用BeautifulSoup我设法访问标记值并按我的意愿修改它们,但我不知道如何保存对文件所做的更改.
import os
import re
from bs4 import BeautifulSoup
htmlDoc = open('adding_computer_c.html',"r+")
soup = BeautifulSoup(htmlDoc)
replacements= [ ('_', '-'), ('../tasks/', prefixUrl), ('../concepts/', prefixUrl) ]
for link in soup.findAll('a', attrs={'href': re.compile("../")}):
newlink=str(link)
for k, v in replacements:
newlink = newlink.replace(k, v)
extrachars=newlink[newlink.find("."):newlink.find(">")]
newlink=newlink.replace(extrachars,'')
link=newlink
print(link)
##How do I save the link I have modified back to the HTML file?
print(soup)##prints the original html tree
htmlDoc.close()
Run Code Online (Sandbox Code Playgroud) 我试图删除我的正则表达式匹配的所有行(正则表达式只是寻找任何包含yahoo的行).每个匹配都在它自己的行上,因此不需要多行选项.
这就是我到目前为止......
import re
inputfile = open('C:\\temp\\Scripts\\remove.txt','w',encoding="utf8")
inputfile.write(re.sub("\[(.*?)yahoo(.*?)\n","",inputfile))
inputfile.close()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
回溯(最近调用最后一次):第170行,在子返回_compile(模式,标志).sub(repl,string,count)TypeError:期望的字符串或缓冲区
我想在文件中特定行的特定列插入一个字符串.
假设我有一个文件 file.txt
How was the English test?
How was the Math test?
How was the Chemistry test?
How was the test?
Run Code Online (Sandbox Code Playgroud)
我想How was the History test?通过History在第4行第13列添加字符串来更改最后一行.
目前我读取文件的每一行并将字符串添加到指定的位置.
with open("file.txt", "r+") as f:
# Read entire file
lines = f.readlines()
# Update line
lino = 4 - 1
colno = 13 -1
lines[lino] = lines[lino][:colno] + "History " + lines[lino][colno:]
# Rewrite file
f.seek(0)
for line in lines:
f.write(line)
f.truncate()
f.close()
Run Code Online (Sandbox Code Playgroud)
但我觉得我应该能够简单地将行添加到文件中,而无需读取和重写整个文件.
我试图通过读取每一行,测试它,然后写,如果它需要更新,替换文本文件中的文本.我不想保存为新文件,因为我的脚本已经先备份文件并对备份进行操作.
这是我到目前为止...我从os.walk()得到fpath,我保证pathmatch var正确返回:
fpath = os.path.join(thisdir, filename)
with open(fpath, 'r+') as f:
for line in f.readlines():
if '<a href="' in line:
for test in filelist:
pathmatch = file_match(line, test)
if pathmatch is not None:
repstring = filelist[test] + pathmatch
print 'old line:', line
line = line.replace(test, repstring)
print 'new line:', line
f.write(line)
Run Code Online (Sandbox Code Playgroud)
但最终发生的事情是,我只得到了几行(正确更新,请注意,但在文件的前面重复)已更正.我认为这是一个范围界定的问题.
*另外:我想知道如何仅在匹配的第一个实例上替换文本,例如,我不想匹配显示文本,只有底层href.
我想知道是否可以在Notepad ++的"查找文件"功能中列出文件过滤器中的排除项.
例如,以下内容将在所有文件中替换Dog with Cat.
找到什么:狗
替换为:Cat
过滤器:*.*
我想做的是在所有文件中替换Dog with Cat,除了.sh文件中的那些文件.
这可能吗?
python ×9
python-3.x ×2
regex ×2
replace ×2
bytecode ×1
filter ×1
html-parsing ×1
io ×1
logging ×1
notepad++ ×1
optimization ×1