如何读取python中的特定行?
我有一个python应用程序,可以从纯文本中阅读 很好用。我的问题是有一种可能的方法可以从多行而不是逐行阅读。例如,下面是我的纯文本文件color.txt:如何读取python中的特定行?,python,Python,我有一个python应用程序,可以从纯文本中阅读 很好用。我的问题是有一种可能的方法可以从多行而不是逐行阅读。例如,下面是我的纯文本文件color.txt: ### ##### ######### #example colors #line of colors #line colors PART 1 color1 gray color2 blue # line colors PART 2 iface eth1 inet static colo
###
#####
#########
#example colors
#line of colors
#line colors PART 1
color1 gray
color2 blue
# line colors PART 2
iface eth1 inet static
color1 yellow
color2 green
我想要“part1”中的color1和color2,所以我逐行阅读,但如果我将color1的位置更改为color2,我会得到一个错误,那么有没有办法阅读“part1”中的所有内容?这样我就可以得到同样的结果
以下是我的完整代码:
from flask import Flask,render_template,flash,request,redirect
import os
import sys
app = Flask(__name__)
def color1_p1():
with open('color.txt', 'r+') as f:
for i, line in enumerate(f):
if i == 7:
found_color = line.find('color1')
if found_color != -1:
color = line[found_color+len('color1:'):]
print ('Color: '), color
return color
def color2_p1():
with open('color.txt', 'r+') as f:
for i, line in enumerate(f):
if i == 8:
found_color = line.find('color2')
if found_color != -1:
color = line[found_color+len('color2:'):]
print ('Color: '), color
return color
def color1_p2():
with open('color.txt', 'r+') as f:
for i, line in enumerate(f):
if i == 13:
found_color = line.find('color1')
if found_color != -1:
color = line[found_color+len('color1:'):]
print ('Color: '), color
return color
def color2_p2():
with open('color.txt', 'r+') as f:
for i, line in enumerate(f):
if i == 14:
found_color = line.find('color2')
if found_color != -1:
color = line[found_color+len('color2:'):]
print ('Color: '), color
return color
@app.route('/')
def showLine():
color1 = color1_p1()
color2 = color2_p1()
color3 =color1_p2()
color4 = color2_p2()
return render_template('color.html', color1=color1, color2=color2, color3=color3,color4=color4)
if __name__ == '__main__':
app.run(debug=True)
正如你所看到的,我是逐行阅读内容的,我想阅读“1”部分的所有内容,我尝试不使用这些行,但这样做时,它会阅读“2”部分或他们找到的第一个“color1和color2”
这是我的输出:
我只想读color1或color2,不管它是哪一行,如果我改变了位置,程序应该读这个,同样的事情也应该发生在第2部分
#!/usr/lib/env python
import re
file = open("color.txt","r")
content = file.read()
file.close()
content = content.split('PART ')[1:]
dic = {}
for part in content:
dic[int(part[0])] = part[1:]
def color(color_index, part_index):
color = re.search('color{_color_index}\s(.*?)\s'.format(_color_index=color_index),dic[part_index]).group(1)
print 'color',color_index,'of PART',part_index,":",color
return color
color(1,1)#color 1 of PART 1 : gray
color(2,1)#color 2 of PART 1 : blue
color(1,2)#color 1 of PART 2 : yellow
color(2,2)#color 2 of PART 2 : green
这样,无论零件和颜色如何排列,您都可以得到您想要的
这样,无论零件和颜色如何排列,您都可以得到您想要的。您可以使用正则表达式找到
color1的“模式”
您建议如何做?我认为这不会比您所做的更好。您可以使用正则表达式找到“模式”关于color1
你建议怎么做?我不认为这会比你做的更好。没有索引1或索引2的情况下,有没有一种可行的方法可以让它工作?例如,在我的纯文本中只有“颜色”一词@如果不关心颜色和部分的索引,可以通过colors=re.findall('color\d\s(.*s?)\s',open('color.txt','r').read())
获得文本中显示的所有颜色。或者通过colors=re.findall('color\d\s(.*?\s',dic[零件索引])
找到与零件对应的零件。我认为你最好学习一些正则表达式的基本知识,这对你在文本文件中查找特定字符串非常有帮助。我尝试了color=re.findall('color\d\s(.*s?)\s',dic[part_index])
,因为我希望它们是按部分的,我通过控制台得到了以下结果[]
哪个应该是红色的@MaxI使用上面提供的color.txt对其进行测试,并分别获得['gray'、'blue']
和['yellow'、'green']
作为颜色(1)
和颜色(2)
的结果。因此,我认为您当前文本文件的格式可能与您上面提供的格式不同?因为正则表达式“color\d\s(.*)\s”查找的字符串的组织方式与color\d\sred\s
完全相同,其中\d
表示数字,\s
表示空白字符。所以,如果文本格式发生了变化,请确保编写适当的正则表达式来匹配它们。这里有一个链接到re
lib[@pythonbengineerthanks供您回答!是的,我的结果与您的结果相同,但我的意思是我得到了['gray','blue']
和['yellow','green']
作为颜色(1)
和颜色(2)的结果
。但在第一个答案中,我得到了四种颜色的四种结果,分别是color(1)
,color(2)
,color(3)
,最后是color(4)
。我想打印这样的东西。例如,我想打印color(1)
而不是打印['gray','blue']
,我想打印color(1)
然后得到“灰色”color(2)
然后得到“蓝色”。这就是我所需要的。可能吗?。顺便说一下,链接不起作用。谢谢..@max有没有一种可能的方法可以让它在没有索引1或索引2的情况下工作?例如,只有“color”这个词在我的纯文本中?@MaxYou可以通过colors=re.findall('color\d\s(.*)\s',open('color.txt','r').read())
获取文本中出现的所有颜色,如果您不关心颜色和部分的索引。或者通过colors=re.findall('color\d\s(.?\s',dic[part u index]))
如果你想让它们与部分相对应。我认为你最好学习正则表达式的一些基本知识,这在你想在文本文件中找到特定字符串时非常有帮助。我尝试了color=re.findall('color\d\s(.*?\s',dic[part\u index])
因为我需要按部件进行测试,所以我通过控制台得到了以下结果[]
,应该是红色
?@MaxI使用上面提供的color.txt对其进行测试,并获得['gray','blue']
和['yellow','green']
作为颜色(1)
和颜色(2)的结果
分别。因此,我认为当前文本文件的格式可能与上面提供的格式不同?因为正则表达式的color\d\s(.*)\s'查找完全按照color\d\sred\s
组织的字符串,其中\d
表示一个数字,\s
表示一个空白字符。因此,如果您的文本格式发生更改,请确保编写适当的正则表达式来匹配它们。下面是指向re
lib文档的链接[@pythonbengineer谢谢你的回答!是的,我的结果和你的一样,但我的意思是我得到了['gray','blue']
和['yellow','green']
作为color(1)
和color(2)
的结果。但是在第一个答案中,我得到了四种颜色,作为color(1)
,color(2),color(3)
最后是color(4)
。我想要这样的东西。例如,我想打印color(1)
而不是得到['gray','blue']
我想打印color(1)
然后得到'gray'color(2)
然后得到“蓝色”。这就是我所需要的。可能吗?顺便说一下,链接不起作用。谢谢..@Max