【问题标题】:How can I read specific columns in a ".dat file" without having header and then store in a list for conversion of right ascension and decilnation如何在没有标题的情况下读取“.dat 文件”中的特定列,然后将其存储在列表中以转换赤经和赤纬
【发布时间】:2019-04-15 10:35:52
【问题描述】:

这是我在 sublime 编辑器中打开 .dat 文件时的样子。 如何在没有标题的情况下读取该“.dat 文件”中的特定列,然后将这些列值以逗号分隔存储在列表中?

   01 04 16 57 15 30 00 119.8 -24.5 38.5
   02 04 20 03 17 25 00 112.2 -29.1 38.4
   03 04 25 42 19 04 00 113.5 -37.2 38.6
   04 05 00 06 21 31 00  70.6 -41.4 42.2
   05 02 55 13 20 28 00 248.8 -29.8 28.5
   06 03 50 18 17 10 00 148.5 -29.8 35.0
   07 04 31 00 14 44 00 106.4 -26.1 37.5
   08 04 48 27 18 45 00  84.3 -34.5 38.5
   09 04 15 25 21 27 00 101.4 -36.6 35.4
   10 04 23 19 22 42 00 116.2 -45.8 35.1
   11 04 26 02 12 56 00 107.4 -15.6 33.4
   12 03 56 56 10 11 00 141.9  -6.2 39.6
   13 04 12 56 15 16 00 117.4 -24.5 36.9
   14 04 17 09 13 54 00 121.6 -18.2 42.0
   15 04 17 46 14 58 00 113.1 -20.2 36.2
   16 04 18 04 13 44 00 109.2 -20.7 37.0
   17 04 21 13 17 19 00 113.4 -31.8 37.5
   18 04 22 02 18 55 00 112.5 -34.5 36.6
   19 04 22 23 22 10 00 113.5 -40.7 40.1
   20 04 22 26 22 05 00 119.7 -44.2 32.0
   21 04 22 36 17 48 00 115.8 -36.4 34.7
   22 04 22 46 15 49 00 105.0 -25.3 36.4
   23 04 25 02 21 30 00 105.9 -41.3 36.2
   24 04 25 43 15 51 00 109.6 -29.3 40.0
   25 04 25 48 15 45 00 111.7 -25.5 39.5
   26 04 27 42 16 05 00 109.2 -23.9 37.5
   27 04 27 48 15 35 00 107.2 -24.7 39.3
   28 04 27 48 13 37 00 113.5 -19.3 38.8
   29 04 29 00 15 44 00 107.5 -29.5 36.0
   30 04 34 41 15 02 00 109.5 -29.2 40.2
   31 04 35 17 15 56 00  93.4 -28.6 38.4
   32 04 35 51 23 03 00 111.3 -57.8 40.0
   33 04 41 39 11 03 00  98.4 -11.9 39.4
   34 04 56 52 15 50 00  87.6 -32.2 44.1

稍后,我想使用此列表将赤经和赤纬从hourminutesseconds 和,分别为degree minutes 等...转换为degree decimals 以进行进一步计算.

我一直在通过在线帮助以不同的方式苦苦挣扎,但我无法继续前进。
任何帮助,将不胜感激。我完全是初学者。

【问题讨论】:

标签: python parallax astronomy hexdump


【解决方案1】:

使用 pandas read_csv,但将分隔符指定为空格。然后指定列名。请参阅下面的模型:

import csv
df = pd.read_csv("file.dat", delim_whitespace=True, names=['a','b','c','d','e','f','g','h','i','j'], )
df

结果如下:

【讨论】:

  • 第二次我导入了 io 和 StringIO 但是然后通过运行此代码 f = io.stringIO("fakepath\Exercises\hyades_pm.dat") 它给了我以下错误: TypeError: initial_value must be unicode or无,不是 str
  • 好的,我现在已经修改了。所以你不需要io。只是熊猫。让我知道它是否有效。
【解决方案2】:

试试这个

with open("data.dat",'r') as file:
      text = [x for x in file.read().split("\n")]
      file.close()
print(text[0:2])

【讨论】:

  • 然后你就可以随意访问列表了
  • 你可以用text = [line for line in file.readlines()]代替...或者更好的是text = [file.readline() for _ in range(2)]代替text[0:2]。您也不需要file.close(),因为with 上下文管理器会在您退出块时为您处理。但是我认为您的回答对 OP 没有帮助。
  • 你的第一个代码给我这个结果如下:['01 04 16 57 15 30 00 119.8 -24.5 38.5','02 04 20 03 17 25 00 11 2.2 -29.1 38.4']但是开头的单引号和空格呢?
  • 使用 strip 删除空格,它是一个列表,您可以通过传递索引号访问任何元素。是你需要的吗?
  • for 循环中 x 的位置是什么,或者 for 循环中的“x”是什么......它是索引吗?另外,例如,我想要一个列表中的第 2、3 和第 4 列,并且在另一个列表中类似地第 5 和第 6 列......这样我就可以在这些列表中为我的角度进行转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多