需要Python帮助:无法读取tsv文件的内容并根据需要填充字典 我要分析的是:
我有一个tsv文件,如下所示: 最终目标是什么: 我的目标是读取tsv文件并在字典和嵌套列表中填充csv文件的内容,而不使用csv解析器 最后,内存表中的需要Python帮助:无法读取tsv文件的内容并根据需要填充字典 我要分析的是:,python,text-parsing,Python,Text Parsing,我有一个tsv文件,如下所示: 最终目标是什么: 我的目标是读取tsv文件并在字典和嵌套列表中填充csv文件的内容,而不使用csv解析器 最后,内存表中的结构看起来 这样(当然有两行以上): { } 我的代码如下所示: 代码的输出: C:\Users\svats\AppData\Local\Programs\Python\Python36-32\Python.exe C:/Users/svats/pycharm项目/BrandNew/module4_lab2/module4_lab2.py
结构看起来
这样(当然有两行以上):
{
}
我的代码如下所示:
代码的输出:
C:\Users\svats\AppData\Local\Programs\Python\Python36-32\Python.exe C:/Users/svats/pycharm项目/BrandNew/module4_lab2/module4_lab2.py
{'header': 'STATION\tSTATION_ID\tELEVATION\tLAT\tLONG\tDATE\tMNTH_MIN\tMNTH_MAX\n', 'rows': ['Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-01-01\t10\t41\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-02-01\t5\t35\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-03-01\t32\t47\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-04-01\t35\t49\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-05-01\t41\t60\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-06-01\t50\t72\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-07-01\t57\t70\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-08-01\t68\t79\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-09-01\t55\t71\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-10-01\t47\t77\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-11-01\t32\t66\n', 'Tukwila\t12345afbl\t10\t47.5463454\t-122.34234234\t2016-12-01\t27\t55\n']}
所需帮助:
我很快就要找到解决办法了
我有两个问题:
1. how to get rid of the \t in the o/p?
2. My o/p is little different from the desired o/p. how do i get it ?
如果将代码重写为:
for line in in_file:
print('repr(line) before :', repr(line) )
temp_list = [line.split()]
#line = line.split()
print('temp_list :',temp_list)
print('repr(line) after :', repr(line) )
print(' %s -----------------' % i)
if ........
并取消对行的注释#line=line.split()
你会明白你得到坏结果的原因
原因是line.split()
不会更改nameline
,
它会创建一个新对象(您想要的列表),如果您想要此名称引用所获得的列表,则必须将名称行
重新指定给该对象
请注意,如果参数sep
为None
或非None
,则方法str.split([sep[,maxslit]])具有不同的算法,有关这一点,请参阅文档
也就是说,有更好的方法
with open('fahrenheit_monthly_readings.tsv','r') as f:
in_memory_table = {'header':next(f).split()}
in_memory_table['rows'] = [line.split() for line in f]
或
你回答的前半部分解决了我的问题。我没有给字典标题指定行,而是指定了临时列表,效果很好。再次感谢你的指点。非常感谢。。
for line in in_file:
print('repr(line) before :', repr(line) )
temp_list = [line.split()]
#line = line.split()
print('temp_list :',temp_list)
print('repr(line) after :', repr(line) )
print(' %s -----------------' % i)
if ........
with open('fahrenheit_monthly_readings.tsv','r') as f:
in_memory_table = {'header':next(f).split()}
in_memory_table['rows'] = [line.split() for line in f]
with open('fahrenheit_monthly_readings.tsv','r') as f:
in_memory_table = {'header':next(f).split()}
in_memory_table['rows'] = list(map(str.split, f))