是否在Python中从一行文本中拆分或剥离可变数量的字符?

2024-09-29 17:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大量此类数据:

  array(14) {
    ["ap_id"]=>
    string(5) "22755"
    ["user_id"]=>
    string(4) "8872"
    ["exam_type"]=>
    string(32) "PV Technical Sales Certification"
    ["cert_no"]=>
    string(12) "PVTS081112-2"
    ["explevel"]=>
    string(1) "0"
    ["public_state"]=>
    string(2) "NY"
    ["public_zip"]=>
    string(5) "11790"
    ["email"]=>
    string(19) "ivorabey@zeroeh.com"
    ["full_name"]=>
    string(15) "Ivor Abeysekera"
    ["org_name"]=>
    string(21) "Zero Energy Homes LLC"
    ["org_website"]=>
    string(14) "www.zeroeh.com"
    ["city"]=>
    string(11) "Stony Brook"
    ["state"]=>
    string(2) "NY"
    ["zip"]=>
    string(5) "11790"
  }

我用python编写了一个for循环来读取文件,为每个数组创建一个字典并存储如下元素:

^{2}$

我知道我的代码很糟糕,但我对Python还是相当陌生的。如你所见,我的大部分项目已经完成。剩下的就是从实际数据中去掉代码标签。例如,我需要string(15) "Ivor Abeysekera"变成{}。在

经过一番研究,我考虑了.lstrip(),但是由于前面的文本总是不同的。。我被卡住了。在

有谁有解决这个问题的聪明方法吗?干杯!在

编辑:我正在Windows7上使用Python2.7。在


Tags: 数据代码nameorgcomidstringpublic
3条回答

基于当前问题的错误解决方案

但要回答你的问题,只需使用

info_string = lines[i + 1]
value_str = info_string.split(" ",1)[-1].strip(" \"")

更好的解决方案

你有没有权限访问生成。。。。如果要这样做,只需执行echo json_encode($data);,而不是使用var_dump

如果您让它们输出json,它(json输出)将如下所示

^{pr2}$

然后你可以把它读出来

import json
json_str = requests.get("http://url.com/json_dump").text  # or however you get the original text
data = json.loads(json_str)
print data

为此,应使用正则表达式(regex): http://docs.python.org/2/library/re.html

使用以下代码可以轻松完成您要执行的操作:

# Import the library
import re

# This is a string just to demonstrate
a = 'string(32) "PV Technical Sales Certification"'

# Create the regex
p = re.compile('[^"]+"(.*)"$')

# Find a match
m = p.match(a)

# Your result will be now in s
s = m.group(1)

希望这有帮助!在

根据代码标记的格式,您可以在"上拆分行,然后选择第二个元素。在

s = 'string(15) "Ivor Abeysekera"'
temp = s.split('"')[1]
# temp is 'Ivor Abeysekera'

请注意,这将消除尾随的",如果需要,可以随时将其添加回来。在您的示例中,这看起来像:

^{pr2}$

因为你调用它太多了(不管你用什么答案),你应该把它变成一个函数:

def prepare_data(line_to_fix):
    return line_to_fix.split('"')[1]
# latter on...
data[a]['state'] = prepare_data(lines[i + 1])

这会给你更多的灵活性。在

相关问题 更多 >

    热门问题