这似乎应该是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]]
答案 0 :(得分:2)
loadtxt
和genfromtxt
解析一行,从简单的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);