我在解决这个问题时遇到了麻烦。我是Python的初学者,一直在搜索这个网站,但似乎无法弄清楚如何解决这个问题。如果我有一个看起来像这样的文件:
3
Alpha
Beta
Gamma
4
Delta
Epsilon
Omega
Zeta
我想读取第一个整数(在这种情况下,3但它可能会有所不同)并打印出来,然后读取接下来的三行(Alpha,Beta,Gamma)并打印出来。之后,我想读取下一个整数(在本例中为4)然后读取接下来的四行(Delta,Epsilon,Omega,Zeta)并打印出来。
我想我已经弄清楚如果修正了这个整数怎么做,但我不知道怎么做,如果那个整数是一个变量,可能是什么。如果整数是固定的,这就是我所拥有的:
with open('myfile.txt') as input_data:
for line in input_data:
if line.strip() == '3':
print "3"
break
# Reads text until the end of the block:
for line in input_data: # This keeps reading the file
if line.strip() == '3':
break
print line
我会把它放在一个循环遍历整个文件,读取(和打印)整数x,读取(和打印)下一个x行,然后读取整数y,读取下一个y行等的while循环中。因为我可以处理大文件,所以看起来逐行读取是f.readline()的方法,所以在我读完第一个整数和数字后,我应该读下一个。
任何帮助都会受到很多赞赏。谢谢!
编辑:
我想读取包含我的数据的文件(3 Alpha Beta Gamma 4等)。然后我将读取3(或任何整数),然后发出信号以读取Alpha Beta Gamma。然后我会将其写入文件。然后,我会读4(或任何整数),然后发信号读取Delta Epsilon Omega Zeta。我会像这样浏览文件的其余部分。
我对各个部分有所了解,所以在从文件" myfile.txt"中读取后,我会将此输出写入" output.txt":
with open('myfile.txt', 'r') as fin:
alllines = fin.readlines();
with open('output.txt', 'w') as fout:
for i in range(len(alllines)):
fout.write(alllines[i]);
我也可以做fin.readline()并逐行阅读。
答案 0 :(得分:1)
如果您的目标是读取格式完美的文件,使第一行为数字N,则第一行后面的N行是要打印的单词,之后的行是数字M,下一行是M行是您要打印(以及打开和打开)的行,然后以下内容将起作用:
with open('myfile.txt') as input_data:
lines_to_print = int(input_data.readline().strip())
for x in xrange(lines_to_print):
print input_data.readline()
这仅适用于您提出的假设案例。
这将打印:
Alpha
Beta
Gamma
Delta
Epsilon
Omega
Zeta
虽然,如果你的目标是打印不是数字的所有,那么你也可以这样做:
with open('myfile.txt') as input_data:
for line in input_data:
if not line.isdigit():
print line
答案 1 :(得分:-1)
我不想编辑我的原始答案,所以这里是一个新答案。
第一步是逐行打开并阅读文件:
with open('myfile.txt') as input_data:
while True:
line = input_data.readline()
print line
if not line:
break
## this is where you do stuff, like file writing and whatnot
如果没有更多行, if not line:
将退出循环。在上面的“执行内容”部分中,首先要检查它是否为数字:
## lineIsANumber = (check if "line" is a number)
如果是数字,则启动另一个循环
if lineIsANumber:
for x in xrange(number_read_from_file):
## read next line
## print line
## write to a file
棘手的部分是每次都写入不同的文件。您可以做的一件事是将文件命名为“1”“2”等...以获取它们创建的顺序。每次lineIsANumber为true时,您都可以使用int并递增它。您需要在主循环中跟踪这一点,while True
位于顶层。
如果你尝试这个并且卡住我可以帮助进一步