Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要Python帮助:无法读取tsv文件的内容并根据需要填充字典 我要分析的是:_Python_Text Parsing - Fatal编程技术网

需要Python帮助:无法读取tsv文件的内容并根据需要填充字典 我要分析的是:

需要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

我有一个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

 {'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()
不会更改name
line

它会创建一个新对象(您想要的列表),如果您想要此名称引用所获得的列表,则必须将名称
重新指定给该对象

请注意,如果参数
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))