任务
我正在用python编写一个运行SAP2000程序的程序,方法是每次将一个新的.s2k文件导入到Sap2000程序中,然后通过导出数据的方式从上一次运行的结果中生成一个新的文件。
该文件大约有1500行,包含任意的单词和数字。(要获得更好的理解,请参见:http://pastebin.com/8ptYacJz,这是我正在处理的文件。)
我需要替换文件中的一个号码。这个数字在第800行的中间。
问题
有没有人知道一种有效的方法,在一个文件中向下移动到第800行的中间,以替换一个数字?
我试过什么
正则表达式无法工作,因为可以有多个相同数目的实例。
所以我想出了一个解决方案,就是给文件做模板,每次写一个新的文件,把要更改的数字作为模板参数。
这个解决方案确实有效,但是这个人坚持我可以将文件指针向下移动到第800行,然后移到行的中间来替换这个数字。
下面是我针对这个问题的唯一代码,它将文件缓冲区带到一行,然后在我试图查找时返回到开头。
import sys
import os
#open file
f = open("output.$2k")
#this will go to line 883 in text file
count = 0;
while count < 883:
line = f.readline()
count = count+1
#this would seek over to middle of file DOESN'T WORK
f.seek(0,0)
line = f.readline()
print(line)
f.close()发布于 2012-07-16 18:53:14
是也不是。考虑:
f=open('output.$2k','r+')
f.seek(300)
f.write('\n')
f.close()这个脚本只是将ascii文件中的第300个字符更改为换行符。现在,棘手的部分是,在到达换行符之前,无法知道ascii文件中行的长度。因此,将文件中的特定字符定位在第800行的中间是非常重要的。但是,如果您可以保证(由于文件的写入方式)的行长度,您可以计算位置没有任何问题。还请注意,用1代替100在这里是行不通的。您需要将1个字符替换为1个字符。
对世界上其他的*NIX用户来说.请不要将$放在您的文件名中。那只是个噩梦..。
发布于 2012-07-16 19:01:32
好的,我不是一个专业的程序员,但我(愚蠢的)方法是:如果它总是行800,在跟踪行号的同时逐行读取文件。然后直接写入一个新文件。读第800行,修改它,写它。那就写剩下的。哑巴,不优雅,但它应该有效--除非我错过了我可能做过的事情。这就是我微薄的名声:D
发布于 2012-07-16 18:53:20
不是的。在行中阅读,操作它,然后将它写到您以前打开的用于写入的新文件中(并一直将其他行写入,未修改)。
https://stackoverflow.com/questions/11510504
复制相似问题