String[] temp;
//temp is the String array returned from/populated in your doInBackground method.
List<String> exlist = new ArrayList<>(Arrays.asList(temp));
dataAdapter = new ArrayAdapter(getApplicationContext(), R.layout.lst_layout, R.id.lstLayout, exList);
lstView = (ListView) findViewById(R.id.listView);
lstView.setAdapter(dataAdapter);
我收到错误
for line in fo:
line = " ".join(line.split())
line = line.strip()
它在python 2.x中运行良好,但不适用于3.4 请为此提出适当的解决方案
答案 0 :(得分:30)
' '
是一个字符串,您使用字节序列调用其join
方法。正如文档中所述,在python-3.x中:
str.join
返回一个字符串,它是字符串的串联 在iterable 可迭代中。如果有的话会TypeError 可迭代的非字符串值,包括bytes个对象。分隔符 elements之间是提供此方法的字符串。
但在这种情况下,由于您正在处理字节对象,因此无法使用str
相关方法。字节对象本身带有join()
方法,可以与str.join
相同的方式使用。您也可以使用io.BytesIO
,或者可以使用bytearray
对象进行就地连接。正如文档中提到的 bytearray
对象是可变的并且具有有效的分配机制。
因此,您只需在空字符串中添加b
前缀即可使其成为字节对象:
line = b" ".join(line.split())
此外,如果您的文件包含字符串,则只需以str
模式('r'
)而非字节('rb'
)打开文件。
with open("input.txt", "r") as f:
# Do something with f
请注意,尽管python-3.x中的str
和byte
对象之间存在分离,但在python-2.x中只有str
。您可以通过使用b
前缀
In [2]: type(b'')
Out[2]: str
这就是以下代码片段的作用:
"".join([b'www', b'www'])
答案 1 :(得分:0)
您应该添加一行 lines = str(lines)
在运行命令以避免错误之前。通过这种方式,您最初会转换为字符串本身。
答案 2 :(得分:0)
如果您是来这里寻找加入C / C ++实现的自定义类的解决方案的,那么最简单的方法是向该类本身添加一个join方法并创建与python的绑定。
例如,一个可以具有列表或映射的类,它们应该是可连接的,pybind11中的示例代码将如下所示:
py::class_<Data> _data(m, "Data");
_data.def(py::init<>())
.def("join", [] (Data &d, const char *j = ' ') {
std::string ret;
if (d.isObject())
for (auto &o: d.object())
ret += o.first + j;
else if (d.isList())
for (auto &o: d.list())
ret += o.stringValue() + j;
return ret;
})
然后在python中,只需为类调用join方法即可
data.join('_')