从文本中读取一行,并将其分成变量/结构

因此,由于数值分析的原因,我最近被迫从C转换为Python,并且是Python/Numpy的新手,我想知道是否有任何函数fscanf的fscanf for python.numpy.numpy。数据并将单个"字符串"存储到变量中。
我认为我最好的选择可能是使用split()将字符串分为x件,但是我不确定如何将字符串的每个单独片段分配给相应的变量。
还想知道是否有python中的C结构。
谢谢您的阅读。

# 回答1


在这里疯狂地猜测,但我认为您所追求的是最好的词典。
但是我不确定您在"将字符串的每个单个部分分配给相应的变量"。或确切的数据外观。或您以后要如何访问它。
但是,词典仍然是一个很好的工具。

选择 | 换行 | 行号
  1. >>> dd = {}
  2. >>> dd["add"] = lambda x, y: x+y
  3. >>> dd["hello"] = "Hello world"
  4. >>> dd
  5. {'add': <function <lambda> at 0x0000000002C2CF98>, 'hello': 'Hello world'}
  6. >>> dd["add"](2,7)
  7. 9
# 回答2


好的,所以我处理的数据看起来像以下数千个:
USB270.15385-29.63146 270.153847 -29.631455 2.966699E+03 -9.99 1.300391E+03 -9.99 -9.99 -1.99 A -A -A -A -A -A -A -A-- 6.787463E --------------------------- | 0.373 13.554 12.928 12.670 AAA | -------------------------------------------------------------------- ------------------------------------------------------------------------------------------------ ----------------------
我想获得该行的每个段,例如" USB 270.15385-29.63146 270.153847",并将其存储在名为star [i] [0]的二维数组中。
第二段-29.631455并将其存储在同一阵列星[i] [1] ...中的第一个14个段。
使用numpy i来累积函数genfromtext(),它允许我获得一串数据并根据定界数对其进行分解,但是我不确定如何将其放入我想要的二维数组中
# 回答3


看来您显示的数据是在一行上,这很有意义。您可以通过在文件对象上迭代类似的内容来编译二维列表:

选择 | 换行 | 行号
  1. fileObj = open(file_name)
  2. data = []
  3. for line in fileObj:
  4.     s = line.split()
  5.     data.append((s[0:2], s[2:14]))
  6. fileObj.close()
# 回答4


我得到一个
类型错误:" int"对象不可订阅
让我看看我是否得到了for循环的工作方式...
它将逐行扫描文件,
对于每一行,它都会将其分为其中,但是它包含的元素。
据我了解,我并不真正了解程序的附加行部分,它将字符串的前两个部分插入数组的第一维中,而另一部分则插入最后13个元素。
我认为我想做的是在这里,但是我无法解决int对象错误:

选择 | 换行 | 行号
  1. fileObj = open(file_name)
  2. data = []
  3. i=0
  4. for line in fileObj:
  5.     s = line.split()
  6.     for j in range(13)
  7.        data[i].append(s[j:j+1])
  8.     i=i+1
  9. fileObj.close()
  10.  

它将行的所有数据输入到由INT I确定的一个维

# 回答5


如果要插入整个行,则只会是数据。应用程序将为您提供列表= 2个维度的列表。替代方案是附加子集
data.Append([S [S [0],S [3],S [5]]) - >仅附加3个字段,第1,4和 第六 注意三个字段周围的[],该字段表示可以解释为第二维的子列表。 除非您在Gigabytes中有数据集,否则将整个列表附加在一起,然后使用任何相关的零件也很容易。 而且,您始终可以将类用作C结构的替代品,但是由于您知道每个位置是什么,那么说数据[x] [y]和某些变量名称一样容易。

选择 | 换行 | 行号
  1. test_data="""USB270.15385-29.63146 270.153847 -29.631455 2.966699e+03 -9.99 1.300391e+03 -9.99 -9.99 A-A-- 6.787463e+01 -9.99 1.555773e+02 -9.99 -9.99 10100 | 0.373 13.554 12.928 12.670 AAA"""
  2. ##fileObj = open(file_name)
  3. bogus_file_obj=test_data.split("|")
  4. data = []
  5. for line in bogus_file_obj:
  6.     s = line.split()
  7.     data.append(s)
  8.  
  9. for rec in data:     ## print the results
  10.     print "-"*30
  11.     for sub_rec in rec:
  12.         print sub_rec 
  13. #
  14. #  print using "array" indexing
  15. print "\n==================================\n"
  16. titles=["Name", "Variance", "Third"]
  17. for x in range(len(data)):
  18.     print "-"*30
  19.     for y in range(len(data[x])):
  20.         ## associate a name with the field location
  21.         if y < len(titles):
  22.             print titles[y],
  23.         print data[x][y]
# 回答6

非常感谢您的帮助!

标签: python

添加新评论