0

我应该先声明我是一个完整的 Python 新手。

我正在尝试创建一个脚本,该脚本将遍历目录及其子目录以查找文本文件。当它遇到一个文本文件时,它将解析该文件并将其转换为 NITF XML 并上传到 FTP 目录。

在这一点上,我仍在努力将文本文件读入变量,以便可以将它们插入 XML 文档的正确位置。文本文件的示例如下。

Headline
Subhead
By A person
Paragraph text.

这是我到目前为止的代码:

with open("path/to/textFile.txt") as f:
    #content = f.readlines()
    head,sub,auth = [f.readline().strip() for i in range(3)]
    data=f.read()
pth = os.getcwd()

print head,sub,auth,data,pth

我的问题是:如何遍历文本文件(数据)的正文并将每一行包装在 HTML P 标记中?例如;

<P>line of text in file </P> <P>Next line in text file</p>.

4

7 回答 7

3

就像是

output_format = '<p>{}</p>\n'.format
with open('input') as fin, open('output', 'w') as fout:
    fout.writelines( output_format(line.strip()) for line in fin )
于 2012-11-02T16:57:00.923 回答
1
with open('infile') as fin, open('outfile',w) as fout:
    for line in fin:
        fout.write('<P>{0}</P>\n'.format(line[:-1])  #slice off the newline.  Same as `line.rstrip('\n')`.

#Only do this once you're sure the script works :)
shutil.move('outfile','infile')  #Need to replace the input file with the output file
于 2012-11-02T16:53:37.393 回答
1

这假设您要将新内容写回原始文件:

with open('path/to/textFile.txt') as f:
    content = f.readlines()

with open('path/to/textFile.txt', 'w') as f:
    for line in content:
        f.write('<p>' + line.strip() + '</p>\n')
于 2012-11-02T16:53:41.387 回答
0

在这里使用data=f.readlines()

然后遍历数据并尝试这样的事情:

for line in data:
   line="<p>"+line.strip()+"</p>"
   #write line+'\n' to a file or do something else 
于 2012-11-02T17:00:09.260 回答
0

您可以使用该fileinput模块就地修改一个或多个文件,如果需要,还可以创建可选的备份文件(有关详细信息,请参阅其文档)。这是用于处理一个文件的。

import fileinput

for line in fileinput.input('testinput.txt', inplace=1):
    print '<P>'+line[:-1]+'<\P>'

'testinput.txt'参数也可以是两个或多个文件名的序列,而不仅仅是一个文件名,这可能很有用,特别是如果您os.walk()用于生成目录中的文件列表及其要处理的子目录(因为您可能应该是正在做)。

于 2012-11-02T21:50:02.373 回答
0

附加

和 <\p> 为每一行

前任:

     data_new=[]
     data=f.readlines()
     for lines in data:
          data_new.append("<p>%s</p>\n" % data.strip().strip("\n"))
于 2012-11-02T20:10:39.817 回答
0

在你的情况下,你可能应该更换

data=f.read()

和:

data = '\n'.join("<p>%s</p>" % l.strip() for l in f)
于 2012-11-02T16:55:04.537 回答