我需要使用Python 2.3,而且我几乎没有编程经验。
我有大量的文件看起来与下面的文件完全相同。我想将“0 2”之后的行替换为看起来基本相同但数字不同的其他行。
有什么建议吗?谢谢你的帮助!
%chk=Li-000+NT-4-SP-B3LYP-6-31+Gx_chk.chk
# ub3lyp/6-31+G* scf=xqc geom=connectivity
Li-000+NT-4-SP-B3LYP-6-31+Gx_chk
0 2
C
C 1 2.23392993
C 2 2.23392993 1 90.00000000
C 3 2.23392993 2 90.00000000 1 0.00000000 0
C 4 2.45854269 3 103.13597413 2 62.19088628 0
C 5 1.41263246 4 30.96712274 3 -114.96688053 0
C 5 2.47345678 4 155.57277852 3 -3.95739525 0
C 7 1.40192800 5 31.36445834 4 -67.05177346 0
C 8 1.47023488 7 118.88012120 5 133.96696254 0
C 9 1.41263246 8 119.23313037 7 178.98716443 0
C 7 2.38756302 5 101.23515048 4 3.92909825 0
C 11 1.40192800 7 90.00000000 5 -29.47652788 0
C 12 1.47023488 11 118.88012120 7 111.98348127 0
C 13 1.41263246 12 119.23313037 11 178.98716443 0
C 11 2.38756302 7 90.00000000 5 60.52347212 0
C 15 1.40192800 11 90.00000000 7 -90.00000000 0
C 16 1.47023488 15 118.88012120 11 111.98348127 0
C 17 1.41263246 16 119.23313037 15 178.98716443 0
C 15 2.38756302 11 90.00000000 7 0.00000000 0
C 19 1.40192800 15 90.00000000 11 -90.00000000 0
C 19 2.48710480 15 101.72503377 11 60.64513898 0
C 21 1.41263246 19 31.05462349 15 -108.16385345 0
C 21 1.44360564 19 134.93861618 15 -37.90663231 0
C 23 1.44360564 21 112.67175768 19 -1.82333415 0
C 24 1.41263246 23 118.80062827 21 -31.82335089 0
C 24 1.44360564 23 101.38056080 21 100.35603013 0
C 26 1.44360564 24 112.67175768 23 -100.35603013 0
C 27 1.41263246 26 118.80062827 24 -31.82335089 0
C 27 1.44360564 26 101.38056080 24 100.35603013 0
C 29 1.44360564 27 112.67175768 26 -100.35603013 0
C 30 1.41263246 29 118.80062827 27 -31.82335089 0
C 21 1.44360564 19 87.91301483 15 66.13240820 0
H 1 1.08676157 6 120.73303602 5 174.96459862 0
H 4 1.08676157 3 93.81889728 2 -93.82740845 0
H 2 1.08676157 1 93.81889728 6 -126.09599138 0
H 3 1.08676157 2 93.81889728 1 -93.82740845 0
H 29 1.08676157 27 120.73303602 26 52.85602036 0
H 26 1.08676157 24 120.73303602 23 52.85602036 0
H 32 1.08676157 21 120.73303602 19 171.61058920 0
H 23 1.08676157 21 120.73303602 19 151.38871634 0
X 15 1.82799866 11 49.22775544 7 -30.42058102 0
Li 41 0.00000001 15 112.54815565 11 -110.97981054 0
1 6 1.5 10 1.5 33 1.0
2 10 1.5 14 1.5 35 1.0
3 14 1.5 18 1.5 36 1.0
4 6 1.5 18 1.5 34 1.0
5 6 1.5 8 1.0 20 1.0
6
7 8 1.5 22 1.0 25 1.0
8 9 1.0
9 10 1.5 12 1.0
10
11 12 1.5 25 1.0 28 1.0
12 13 1.0
13 14 1.5 16 1.0
14
15 16 1.5 28 1.0 31 1.0
16 17 1.0
17 18 1.5 20 1.0
18
19 20 1.5 22 1.0 31 1.0
20
21 22 1.5 23 1.5 32 1.5
22
23 24 1.5 40 1.0
24 25 1.5 26 1.5
25
26 27 1.5 38 1.0
27 28 1.5 29 1.5
28
29 30 1.5 37 1.0
30 31 1.5 32 1.5
31
32 39 1.0
33
34
35
36
37
38
39
40
41
答案 0 :(得分:0)
fpath = os.path.join(thisdir, filename)
with open(fpath, 'r+') as f:
lines = f.readlines()
f.seek(0)
f.truncate()
for line in lines:
if '0 2' in line:
for test in filelist:
pathmatch = file_match(line, test)
if pathmatch is not None:
repstring = filelist[test] + pathmatch
line = line.replace(test, repstring)
f.write(line)
一个奇怪的事情是你必须在运行上面的代码之前复制你的文件,否则你可能会丢失原始代码
替换文件中一行的(相对)安全方法。
enter code here
#!/usr/bin/python
# defensive programming style
# function to replace a line in a file
# and not destroy data in case of error
def replace_line(filepath, oldline, newline ):
"""
replace a line in a temporary file,
then copy it over into the
original file if everything goes well
"""
# quick parameter checks
assert os.exists(filepath) # !
assert ( oldline and str(oldline) ) # is not empty and is a string
assert ( newline and str(newline) )
replaced = False
written = False
try:
with open(filepath, 'r+') as f: # open for read/write -- alias to f
lines = f.readlines() # get all lines in file
if oldline not in lines:
pass # line not found in file, do nothing
else:
tmpfile = NamedTemporaryFile(delete=True) # temp file opened for writing
for line in lines: # process each line
if line == oldline: # find the line we want
tmpfile.write(newline) # replace it
replaced = True
else:
tmpfile.write(oldline) # write old line unchanged
if replaced: # overwrite the original file
f.seek(0) # beginning of file
f.truncate() # empties out original file
for tmplines in tmpfile:
f.write(tmplines) # writes each line to original file
written = True
tmpfile.close() # tmpfile auto deleted
f.close() # we opened it , we close it
except IOError, ioe: # if something bad happened.
printf ("ERROR" , ioe)
f.close()
return False
return replaced and written # replacement happened with no errors = True
(注意:这只替换了整行,以及文件中匹配的所有行)