用python中的单个逗号替换一行中可变数量的空格

时间:2019-07-15 06:16:11

标签: python

我正在尝试从网站(https://www.bexar.org/DocumentCenter/View/22152/June-8-2019-Election-Totals-Report)上刮取最终投票数据,以用于制作地图。通过复制所需的数据(CITY OF SAN ANTONIO市长),我可以缩小很多范围,但区(1001、1002等)与第一票总数之间的空间量取决于数量的投票数(第1列中35位数表示2位数的投票数,3位数表示34空格,依此类推)。

我遇到的问题是,我已经两年没有使用python了,我只是想在Excel中获取专区并投票给总数,以便从中获取一些额外的数据,而无需手动输入。我试图仅使用网站上的数据制作CSV文件,然后将其导入Excel。

我试图记住一些我学过的python,并且能够用逗号替换 any 出现的空格,但这不适用于CSV文件,因为据我所知。

这是我到目前为止所做的。

import re
filename = open("E:\Downloads\data.txt")
contents = filename.read()
print(re.sub("[ ,.]", ",", contents))

这给了我

1001,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,172,,,,26,,,,,0,,,,,1
1002,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,50,,,,,0,,,,,0

依此类推,而不是

1001,172,26,0,1
1002,27,50,0,0

这是我想要的结果。

非常感谢您的帮助:)

5 个答案:

答案 0 :(得分:0)

您尝试过

numspaces=4
contents=contents.replace(" "*numspaces,",")

答案 1 :(得分:0)

您可以尝试

re.sub("[ ]{2,}",",", string)

它将用逗号替换两个或多个空格。

答案 2 :(得分:0)

您可以使用\ W匹配任何非单词字符:

contents = re.sub(r'\W+', ',', contents)

更准确

contents = re.sub(r'(\W)\1+', r'\1', contents)

Regex Test

答案 3 :(得分:0)

这将更改您的代理标头,因此您不会显示为机器人。您将在Java页面上遇到一个解析阻止器。要抓取Java页面,您将需要使用Selenium之类的东西。 https://stanford.edu/~mgorkove/cgi-bin/rpython_tutorials/Scraping_a_Webpage_Rendered_by_Javascript_Using_Python.php

import urllib.request
import urllib.parse
import re

try:
    url = input('Enter full website address (http://, https://:> ')
    headers = {}
    headers['User-Agent'] = 'Mozilla/5.0 (x11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17'
    req = urllib.request.Request(url, headers=headers)
    resp = urllib.request.urlopen(req)
    respdata = resp.read()


except Exception as e:
    print('That is not a valid website address\nCheck the web address'
          , (e))

content = re.findall(r'<p>(.*?)</p>', str(respdata))
for contents in content:
    print(contents)

答案 4 :(得分:0)

    def func(string):
        lst =string.split(",")
        result =",".join([i for i in lst if i!=""])
        return result
    a ='1001,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,172,,,,26,,,,,0,,,,,1'
    b='1002,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,50,,,,,0,,,,,0'
    print(func(a))
    #1001,172,26,0,1