def main():
text = open("unformated.txt", "r").readlines()
infile = open("formated", "w")
title = ""
for k, line in enumerate(text):
if (k == 0):
for i in text[0].split():
i = i.lower()
title += i.capitalize() + " "
title = title + text[1][find("Prudence") : find("Prudence") + len("Prudence")]
infile.write(title.center(100, " ")
if (k == 1)
text[1].replace("Prudence ", "")
infile.write(text[1])
infile.write("\n")
if (k > 1)
words_in_list = ""
for j in line.split():
words_in_list += j + " "
infile.write(words_in_list)
infile.write("\n")
infile.close()
main()
因此,第一张图片显示了非格式化文本的外观。第二个显示格式化的文本在通过python代码运行时的外观。
我不知道如何使用for k, enumerated(text:
循环从第二行(行)开始
title
可以以某种方式在for循环之外进行处理。标题的问题是如何从第二行中提取字符串"Prudence"
并将其附加到第一行的标题中。然后,在循环中,使用大写字母"by"
将字符串"B"
(第二行)制成第二行的字符串开头。
我不知道如何缩进段落,我只对rjust()
知道,但是如何知道哪一行将成为该段落,也就是说,在哪一行之后(以及如何) 新队。由于某些原因,infile.write("\n")
无法正常工作?
考虑到我是本课程的初学者,我们不应该使用if / else语句(即使我在这里使用了它们,但我对其他解决方案没有其他想法)和其他控制结构
执行以下代码行:
text = open("unformated.txt","r").readlines()
变量text
中到底有什么?
答案 0 :(得分:0)
在.readlines()的文档中,本质上是读取文件中的所有行并返回所有行的列表。
还请注意,您可以for line in text
遍历各行,并且由于text
是可迭代的,因此您也可以枚举它。为了跳过第一行,只需使用.next()
,它也返回该行,这样您可以存储和/或在使用.next
的同时写它,然后循环遍历它们。
这样,对于您给出的示例,想要得到的结果我想说您不需要所有这些代码(也不需要readlines()
或enumerate()
)来获取您正在寻找的结果。我说您可以使用仅将段落结尾确定为以句点结尾和回车的行的方式。 (即'.\n
)
unformatted = open("unformated.txt", "r")
formatted = open("formated", "w")
#use .next() to get the next line. .next for the first time returns the first line
formatted.write(unformatted.next().title().center(100)
#then the rest just split paragraphs as I described above
for line in unformatted:
if line.endswith('.\n')
formatted.write('{}\n}'.format(line))
elif line.startswith('Prudence'):
formatted.write('\t{}\n'.format(unformatted.next()))
else:
formatted.write(line.replace('\t', ''))
这应该让您获得理想的结果,只需记住我识别段落的方式即可。
编辑-上面包含if语句
从技术上讲,您可以假设前两行是标题行。并为他们使用字典映射器。这将需要enumerate()
。
def make_title(t):
return t.title().center(100)
def make_subtitle(t):
return '\t' + t
def other_lines(t):
return x.replace('.\n', ',\n\n')
special_lines = {
0: make_title,
1: make_subtitle
}
for n, line in enumerate(unformatted):
formatted.write(special_lines.get(n, other_lines))(line)
请有人检查我的工作。我不在计算机上进行测试,但我认为这符合他的约束的正确思路,我知道我可以使用lambda来实现功能,但我不想过度使用它。
答案 1 :(得分:0)
text = open(“ unformated.txt”,“ r”)。readlines()将文件内容存储在列表中。
在k行中的,在enumerate(text)中一行:它逐行遍历文本。 现在,如果您需要从第二行开始循环,可以尝试如下操作:
对于k,行以枚举(文本[2:]):
如果您还想循环阅读,也可以这样写:
对于k,行中的枚举(text [2:],2):
这样,k的值将从2开始,循环也从第二行开始。
我希望我能正确理解问题。