首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件指针向下,然后结束

文件指针向下,然后结束
EN

Stack Overflow用户
提问于 2012-07-16 18:40:54
回答 4查看 891关注 0票数 0

任务

我正在用python编写一个运行SAP2000程序的程序,方法是每次将一个新的.s2k文件导入到Sap2000程序中,然后通过导出数据的方式从上一次运行的结果中生成一个新的文件。

该文件大约有1500行,包含任意的单词和数字。(要获得更好的理解,请参见:http://pastebin.com/8ptYacJz,这是我正在处理的文件。)

我需要替换文件中的一个号码。这个数字在第800行的中间。

问题

有没有人知道一种有效的方法,在一个文件中向下移动到第800行的中间,以替换一个数字?

我试过什么

正则表达式无法工作,因为可以有多个相同数目的实例。

所以我想出了一个解决方案,就是给文件做模板,每次写一个新的文件,把要更改的数字作为模板参数。

这个解决方案确实有效,但是这个人坚持我可以将文件指针向下移动到第800行,然后移到行的中间来替换这个数字。

下面是我针对这个问题的唯一代码,它将文件缓冲区带到一行,然后在我试图查找时返回到开头。

代码语言:javascript
复制
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()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-16 18:53:14

是也不是。考虑:

代码语言:javascript
复制
f=open('output.$2k','r+')
f.seek(300)
f.write('\n')
f.close()

这个脚本只是将ascii文件中的第300个字符更改为换行符。现在,棘手的部分是,在到达换行符之前,无法知道ascii文件中行的长度。因此,将文件中的特定字符定位在第800行的中间是非常重要的。但是,如果您可以保证(由于文件的写入方式)的行长度,您可以计算位置没有任何问题。还请注意,用1代替100在这里是行不通的。您需要将1个字符替换为1个字符。

对世界上其他的*NIX用户来说.请不要将$放在您的文件名中。那只是个噩梦..。

票数 1
EN

Stack Overflow用户

发布于 2012-07-16 19:01:32

好的,我不是一个专业的程序员,但我(愚蠢的)方法是:如果它总是行800,在跟踪行号的同时逐行读取文件。然后直接写入一个新文件。读第800行,修改它,写它。那就写剩下的。哑巴,不优雅,但它应该有效--除非我错过了我可能做过的事情。这就是我微薄的名声:D

票数 1
EN

Stack Overflow用户

发布于 2012-07-16 18:53:20

不是的。在行中阅读,操作它,然后将它写到您以前打开的用于写入的新文件中(并一直将其他行写入,未修改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11510504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档