我是python的新手,我尝试了一个新问题,但无法获得解决方案。我有一个名为replace.txt的文本文件,内容如下:
81, 40.001, 49.9996, 49.9958
82, 41.1034, 54.5636, 49.9958
83, 44.2582, 58.1856, 49.9959
84, 48.7511, 59.9199, 49.9957
85, 53.4674, 59.3776, 49.9958
86, 57.4443, 56.6743, 49.9959
87, 59.7, 52.4234, 49.9958
现在我还有一个名为实际数据的文件,它有大量的数据,如上所述,我想通过匹配搜索' 81&#的第一个数字来替换actualdata.txt中的上述行39;在actualdata.txt中,将其替换为具有' 81'在replace.txt
这里的actualdata.txt看起来像这样:
--------lines above--------
81, 40.0 , 50.0 , 50.0
82, 41.102548189607, 54.564575695695, 50.0
83, 44.257790830341, 58.187003960661, 50.0
84, 48.751279796738, 59.921728571875, 50.0
85, 53.468166336575, 59.379329520912, 50.0
86, 57.445611860313, 56.675542227082, 50.0
87, 59.701750075154, 52.424055585018, 50.0
88, 59.725876387298, 47.674633684987, 50.0
89, 57.511209176153, 43.398353484768, 50.0
90, 53.558991157616, 40.654756186166, 50.0
91, 48.853051436724, 40.06599229952 , 50.0
92, 44.335578609695, 41.75898487363 , 50.0
93, 41.139049269956, 45.364964707822, 50.0
94, 4.9858306110506, 4.9976785333108, 50.0
95, 9.9716298556132, 4.9995886389273, 50.0
96, 4.9712790759448, 9.9984071508336, 50.0
97, 9.9421696473295, 10.002460334272, 50.0
98, 14.957223264745, 5.0022762348283, 50.0
99, 4.9568005100444, 15.000751982196, 50.0
------lines below----------
我该怎么做呢请帮助我我尝试使用fileinput并替换但我没有得到输出。
这是我仍在即兴创作的示例代码(这是一行的fyn):
oldline=' 82, 41.102548189607, 54.564575695695, 50.0'
newline=' 81, 40.001, 49.9996, 49.9958'
for line in fileinput.input(inpfile, inplace = 1):
print line.replace(oldline,newline),
这是我最后写的代码:
replacefile= open('temp.txt','r')
for line1 in replacefile:
newline = line1.rstrip()
rl=newline
rl=rl.split()
search =rl[0]
with open(inpfile) as input:
intable = False
for line in input:
fill=[]
if line.strip() == "*NODE":
intable = True
if line.strip() == "---------------------------------------------------------------":
intable = False
if intable:
templine=(line.rstrip())
tl=line.rstrip()
tl= tl.split()
if tl[0] == search:
oldline=templine
for line2 in fileinput.input(inpfile, inplace = 1):
line2.replace(oldline,newline)
但是我无法获得输出,realdata.txt的内容正在被删除,请帮助我 我想要的输出是改变这样的actualdata.txt:
-------lines above------
81, 40.001, 49.9996, 49.9958
82, 41.1034, 54.5636, 49.9958
83, 44.2582, 58.1856, 49.9959
84, 48.7511, 59.9199, 49.9957
85, 53.468166336575, 59.379329520912, 50.0
86, 57.445611860313, 56.675542227082, 50.0
87, 59.701750075154, 52.424055585018, 50.0
88, 59.725876387298, 47.674633684987, 50.0
89, 57.511209176153, 43.398353484768, 50.0
90, 53.558991157616, 40.654756186166, 50.0
-------lines below------
答案 0 :(得分:1)
使用fileinput模块替换 inplace :
import fileinput
def get_next_line(fptr):
x = fptr.readline()
if(x != ''):
return x.strip(), x.strip().split()[0].strip()
else:
return '',''
f = open("replace.txt", "r")
f_line, f_line_no = get_next_line(f)
for line in fileinput.input("actualdata.txt", inplace=True):
if(line.strip().split()[0].strip() == f_line_no): #if line number matches
print(f_line) # write newline
f_line, f_line_no = get_next_line(f) # Get next newline
else: # Otherwise
print(line.strip()) # write original one
顺便说一句,我使用 python3 。如果您使用 python2
,请进行适当的更改答案 1 :(得分:0)
replace.txt
也很大吗?如果没有,您可以先将其加载到内存中,构建一个字典并用它来替换{{1}}中的行
这就是我在做的事情:
首先打开actualdata.txt
并构建字典。由于您要用行的第一个值替换行,我们将其作为字典键。并且其值将是您想要替换的行。像:
replace.txt
接下来,我们逐行开始阅读replacement_data = {
'81': '81, 40.001, 49.9996, 49.9958',
'82': 82, 41.1034, 54.5636, 49.9958,
...
...
}
文件。所以,我们必须找到这条线的第一个数字是否要被替换。因此,我们将首先将其拆分为actualdata.txt
,获取第一个字符并查看它是否存在于,
字典中。如果它存在,我们将替换它,如果没有,我们将忽略。
replacement_data
把所有部分放在一起:
line = "83, 44.257790830341, 58.187003960661, 50.0"
first_char = line.split(',')[0].strip() #first char is 83
# lets check whether to replace it or not
if first_char in replacement_data.keys():
# if key exists, we have to replace
line = replacement_data[first_char]
print line # so that it writes to file
它生成原始文件:
import fileinput
import sys
inpfile = 'actualdata.txt'
replacement_file = 'replace.txt'
replacement_data = {}
with open(replacement_file) as f:
for line in f:
key = line.split(',')[0].strip()
replacement_data[key] = line
for line in fileinput.input(inpfile, inplace = 1):
first_char = line.split(',')[0].strip()
try:
int(first_char)
line = replacement_data[first_char]
print line,
except (ValueError, KeyError):
print line,
continue