读取python中的多层csv文件
我需要从文本文件中读取以下数据读取python中的多层csv文件,python,list,file-io,Python,List,File Io,我需要从文本文件中读取以下数据 [L02] g,g,g,g,g,g,g,g,g,g,w,w,w,w,g,g g,g,g,g,g,g,g,g,g,w,w,w,w,w,g,g g,g,g,g,g,g,g,g,w,w,w,w,w,g,g,g g,g,g,g,g,g,g,g,w,w,w,w,g,g,g,g g,g,g,g,g,g,g,g,g,w,w,w,w,g,g,g g,g,g,g,g,g,g,g,g,g,w,w,w,w,g,g g,g,g,g,g,g,g,g,g,g,g,w,w,w,g,g g,g,
[L02]
g,g,g,g,g,g,g,g,g,g,w,w,w,w,g,g
g,g,g,g,g,g,g,g,g,w,w,w,w,w,g,g
g,g,g,g,g,g,g,g,w,w,w,w,w,g,g,g
g,g,g,g,g,g,g,g,w,w,w,w,g,g,g,g
g,g,g,g,g,g,g,g,g,w,w,w,w,g,g,g
g,g,g,g,g,g,g,g,g,g,w,w,w,w,g,g
g,g,g,g,g,g,g,g,g,g,g,w,w,w,g,g
g,g,g,g,g,g,g,g,g,g,g,w,w,g,g,g
g,g,g,g,g,g,g,g,g,g,g,w,w,g,g,g
g,g,g,g,g,g,g,g,g,g,w,w,w,g,g,g
g,g,g,g,g,g,g,g,g,w,w,w,g,g,g,g
g,g,g,g,g,g,g,g,w,w,w,w,g,g,g,g
g,g,g,g,g,g,g,w,w,w,w,g,g,g,g,g
g,g,g,g,g,g,g,w,w,w,g,g,g,g,g,g
g,g,g,g,g,g,w,w,w,w,w,g,g,g,g,g
g,g,g,g,g,g,g,w,w,w,w,g,g,g,g,g
[L01]
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
我可以将单个块作为csv文件读取,但我不知道如何将每个文件作为单独的列表读取
我想要的输出是为每个块提供数组/列表,其中块内容作为列表元素。有什么想法吗?如果有,可以将文件读入numpy数组comments='['
告诉np.genfromtxt
忽略以[
开头的行。重塑
方法将每个16x16块放置在其自己的“层”中
您可以使用arr[n]
访问第n层,如果有,您可以将文件读入一个numpy数组。comments='['
告诉np.genfromtxt
忽略以[
开头的行。重塑
方法将每个16x16块放在自己的“层”
您可以使用
arr[n]
访问第n层。下面是一个脚本,演示如何将问题分解为可重用的步骤(函数)并执行所需的转换
import itertools
import operator
import re
import csv
import pprint
class TaggedLine(str):
"""
Override str to allow a tag to be added.
"""
def __new__(cls, val, tag):
return str.__new__(cls, val)
def __init__(self, val, tag):
super(TaggedLine, self).__init__(val)
self.tag = tag
def sections(stream):
"""
Tag each line of the stream with its [section] (or None)
"""
section_pattern = re.compile('\[(.*)\]')
section = None
for line in stream:
matcher = section_pattern.match(line)
if matcher:
section = matcher.group(1)
continue
yield TaggedLine(line, section)
def splitter(stream):
"""
Group each stream into sections
"""
return itertools.groupby(sections(stream), operator.attrgetter('tag'))
def parsed_sections(stream):
for section, lines in splitter(stream):
yield section, list(csv.reader(lines))
if __name__ == '__main__':
with open('data.csv') as stream:
for section, data in parsed_sections(stream):
print 'section', section
pprint.pprint(data[:2])
将文件另存为“data.csv”,脚本将使用以下输出在数据上运行:
section L02
[['g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'w',
'w',
'w',
'w',
'g',
'g'],
['g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'w',
'w',
'w',
'w',
'w',
'g',
'g']]
section L01
[['d',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd'],
['d',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd']]
下面的脚本演示了如何将问题分解为可重用的步骤(函数)并执行所需的转换
import itertools
import operator
import re
import csv
import pprint
class TaggedLine(str):
"""
Override str to allow a tag to be added.
"""
def __new__(cls, val, tag):
return str.__new__(cls, val)
def __init__(self, val, tag):
super(TaggedLine, self).__init__(val)
self.tag = tag
def sections(stream):
"""
Tag each line of the stream with its [section] (or None)
"""
section_pattern = re.compile('\[(.*)\]')
section = None
for line in stream:
matcher = section_pattern.match(line)
if matcher:
section = matcher.group(1)
continue
yield TaggedLine(line, section)
def splitter(stream):
"""
Group each stream into sections
"""
return itertools.groupby(sections(stream), operator.attrgetter('tag'))
def parsed_sections(stream):
for section, lines in splitter(stream):
yield section, list(csv.reader(lines))
if __name__ == '__main__':
with open('data.csv') as stream:
for section, data in parsed_sections(stream):
print 'section', section
pprint.pprint(data[:2])
将文件另存为“data.csv”,脚本将使用以下输出在数据上运行:
section L02
[['g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'w',
'w',
'w',
'w',
'g',
'g'],
['g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'g',
'w',
'w',
'w',
'w',
'w',
'g',
'g']]
section L01
[['d',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd'],
['d',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd']]
哇,谢谢!我不希望看到完整的代码!我只需要格式化输出。再次感谢。TaggedLine可以更简单地使用namedtuple声明:
TaggedLine=namedtuple(“TaggedLine”,“line tag”)
。不确定继承自str
能为您带来什么。继承自str意味着标记行仍然可用作字符串,因此您可以将其视为原始行(或行序列)。如果使用namedtuple,则处理序列的代码必须知道它得到的是一个元组而不是一个字符串,并相应地进行处理。在这个特定的示例中,元组可以很好地工作,但是由于节获取一个行流并生成一个行流,因此它更易于重用。哇,谢谢!我不希望整个元组都能工作e代码!我只需要格式化输出。再次感谢。可以使用namedtuple更简单地声明TaggedLine:TaggedLine=namedtuple(“TaggedLine”,“line tag”)
。不确定继承自str
能为您带来什么。继承自str意味着标记行仍然可用作字符串,因此您可以将其视为原始行(或行序列)。如果使用namedtuple,则处理序列的代码必须知道它得到的是一个元组而不是字符串,并相应地进行处理。在这个特定示例中,元组可能工作得很好,但由于节
接受一个行流并生成一个行流,因此它更易于重用。