如何从文件

时间:2016-12-03 01:44:39

标签: numpy text

这似乎应该是python中最基本的事情,它应该几乎是一个默认选项。我有一个文本文件,其中包含

等行
123, [12, 23, 45, 67]

第二个数组的长度是可变的。我怎么读这个?无论出于何种原因,我找不到关于如何处理'['或']'的单一文档,有人可能认为这是python中最基本的单个字符。

np.loadtxt是一个半身像,显然这仅适用于最简单的文件格式

由于缺少列,np.genfromtxt是一个半身像。顺便说一句,我想相信missing_value功能在这里可能会有所帮助。知道missing_value实际上做了什么(如果有的话)会很有用(在文档中根本没有解释清楚)。

我尝试了np.fromstring路线,它给了我

['123', '[12', '23', '45', '67]']

据推测,我可以逐个解析这个项目以处理'['和']'但​​是在这个阶段我只是创建了自己的python文件阅读器来阅读一个相当基本的python结构!

至于所需的输出,在这个阶段我几乎可以满足任何需求。显而易见的构造将是逐行形式的

[123, [12, 23, 45, 67]]

2 个答案:

答案 0 :(得分:2)

loadtxtgenfromtxt解析一行,从简单的split开始。

In [360]: '123, [12, 23, 45, 67]'.split(',')
Out[360]: ['123', ' [12', ' 23', ' 45', ' 67]']

然后他们尝试转换单个字符串。有些可以轻松转换为整数或浮点数。 []的人不会。处理这些并非易事。

Python附带的csv阅读器可以处理引用的文本,例如

 `one, "twenty, three", four'

我还没有充分了解它是否可以将[]视为报价。

如果在括号内使用不同的分隔符,则括号中的文本更容易解析,例如

In [371]: l1='123; [12, 23, 45, 67]'.split(';')
In [372]: l1
Out[372]: ['123', ' [12, 23, 45, 67]']
In [373]: l2=l1[1].strip().strip(']').strip('[').split(',')
In [374]: l2
Out[374]: ['12', ' 23', ' 45', ' 67']

正如Warren评论的那样,普通CSV是一种行业标准,并且用于多种语言。括号等的使用尚未标准化。但是有XML,JSON和yaml等数据交换语言,以及非文本数据文件(例如HD5F)。

JSON示例:

In [377]: json.loads('[123, [12, 23, 45, 67]]')
Out[377]: [123, [12, 23, 45, 67]]

答案 1 :(得分:1)

默认选项为eval。它允许您在字符串中评估Python表达式。但这是一个安全隐患,例如, this question。但是ast.literal_eval应该没问题。例如:

intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/jpg");
        //intent.setType("image/*");

        Uri imageUri = Uri.parse("android.resource://com.example.anjuthanm.intenttest/"+R.drawable.test_image);
        //Uri imageUri = Uri.parse("android.resource://com.example.anjuthanm.intenttest/drawable/test_image");

        intent.putExtra(Intent.EXTRA_STREAM, imageUri);
        intent.putExtra(Intent.EXTRA_TEXT, "Sent from my app");
        chooser = Intent.createChooser(intent, "Send Image");
        startActivity(chooser);