小编bri*_*enb的帖子

Python 正则表达式中可变宽度后视的替代方案

我最近决定跳入 Python 池的最深处并开始将我的一些 R 代码转换为 Python 并且我被困在对我来说非常重要的事情上。在我的工作中,我花费了大量时间来解析文本数据,众所周知,文本数据非常非结构化。因此,我开始依赖正则表达式的环视功能,而 R 的环视功能非常强大。例如,如果我正在解析一个 PDF,当我对文件进行 OCR 时,它可能会在字母之间引入一些空格,我会得到我想要的值,如下所示:

oAcctNum <- str_extract(textBlock[indexVal], "(?<=ORIG\\s?:\\s?/\\s?)[A-Z0-9]+")
Run Code Online (Sandbox Code Playgroud)

在 Python 中,这是不可能的,因为使用?使后视成为可变宽度表达式而不是固定宽度。这个功能对我来说非常重要,它阻止了我想要使用 Python,但我不想放弃这种语言,我想知道 Pythonista 解决这个问题的方法。我是否必须在提取文本之前预处理字符串?像这样的东西:

oAcctNum = re.sub(r"(?<=\b\w)\s(?=\w\b)", "")
oAcctNum = re.search(r"(?<=ORIG:/)([A-Z0-9])", textBlock[indexVal]).group(1)
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?因为虽然这个例子是微不足道的,但这个问题以非常复杂的方式出现在我处理的数据中,我不想对我分析的每一行文本进行这种预处理。

最后,如果这不是问这个问题的正确地方,我深表歉意;我不知道还有什么地方可以张贴。提前致谢。

python regex lookaround

5
推荐指数
1
解决办法
602
查看次数

如何在Python中正确使用多处理模块?

我有110个PDF,我正在尝试从中提取图像.提取图像后,我想删除任何重复项并删除小于4KB的图像.我这样做的代码如下:

def extract_images_from_file(pdf_file):
    file_name = os.path.splitext(os.path.basename(pdf_file))[0]
    call(["pdfimages", "-png", pdf_file, file_name])
    os.remove(pdf_file)

def dedup_images():
    os.mkdir("unique_images")
    md5_library = []
    images = glob("*.png")
    print "Deleting images smaller than 4KB and generating the MD5 hash values for all other images..."
    for image in images:
        if os.path.getsize(image) <= 4000:
            os.remove(image)
        else:
            m = md5.new()
            image_data = list(Image.open(image).getdata())
            image_string = "".join(["".join([str(tpl[0]), str(tpl[1]), str(tpl[2])]) for tpl in image_data])
            m.update(image_string)
            md5_library.append([image, m.digest()])
    headers = ['image_file', 'md5']
    dat = pd.DataFrame(md5_library, columns=headers).sort(['md5'])
    dat.drop_duplicates(subset="md5", inplace=True)

    print "Extracting the unique images."
    unique_images …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multithreading multiprocessing

5
推荐指数
1
解决办法
235
查看次数

使用Python中的另一个元组过滤元组

我有一个使用该zip函数创建的元组列表.zip带来的是四个列表一起:narrative,subject,activity,和filer,其中的每一个仅仅是一个0和1的列表.假设这四个列表看起来像这样:

narrative = [0, 0, 0, 0]
subject = [1, 1, 0, 1]
activity = [0, 0, 0, 1]
filer = [0, 1, 1, 0]
Run Code Online (Sandbox Code Playgroud)

现在,我正在将zip它们放在一起以获取一个布尔值列表,指示它们中是否有任何一个True.

ny_nexus = [True if sum(x) > 0 else False for x in zip(narrative, subject, activity, filer)]

我现在遇到的问题是获得第二个元组列表,如果在迭代期间它具有1,则返回变量的名称.我想它看起来像这样:

variables = ("narrative", "subject", "activity", "filer")
reason = [", ".join([some code to filter a tuple]) for x in zip(narrative, subject, activity, …
Run Code Online (Sandbox Code Playgroud)

python tuples list

5
推荐指数
1
解决办法
198
查看次数

如何在Pandas.read_csv中使用方括号作为引号字符

假设我有一个看起来像这样的文本文件:

Item,Date,Time,Location
1,01/01/2016,13:41,[45.2344:-78.25453]
2,01/03/2016,19:11,[43.3423:-79.23423,41.2342:-81242]
3,01/10/2016,01:27,[51.2344:-86.24432]
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是读取pandas.read_csv,但第二行将抛出错误.这是我目前使用的代码:

import pandas as pd
df = pd.read_csv("path/to/file.txt", sep=",", dtype=str)
Run Code Online (Sandbox Code Playgroud)

我试图设置quotechar为"[",但显然只是吃掉线直到下一个打开括号并添加一个右括号会导致"找到长度为2的字符串"错误.任何见解将不胜感激.谢谢!

更新

提供了三种主要解决方案:1)为数据框提供大量名称,以允许读入所有数据,然后对数据进行后处理,2)在方括号中查找值并在其周围加上引号,或者3)用分号替换前n个逗号.

总的来说,我认为选项3通常不是一个可行的解决方案(虽然对我的数据来说很好),因为a)如果我在一个包含逗号的列中引用了值,b)如果我的方括号列是不是最后一栏?这留下了解决方案1和2.我认为解决方案2更具可读性,但解决方案1更有效,仅运行1.38秒,而解决方案2则运行3.02秒.测试在包含18列和超过208,000行的文本文件上运行.

python csv pandas

5
推荐指数
1
解决办法
1785
查看次数

如何从源代码构建包?

我正在工作的Windows 7计算机,并希望使用libpostal包.不幸的是,它显然不适用于Windows,所以我试图通过Cygwin配置它,我很接近.最后一步是从Google 安装snappy.再次,在Windows上不可用...

我的假设(基于什么都没有)是我可以下载tarball并从源代码构建它,对吧?我试过了,我觉得它有用吗?但是)我不知道如何分辨,和b)如果它这样做,我不知道如何告诉./configurelibpostal找到它.

为了从源代码构建它,我下载了tarball并将其保存在Cygwin读取为我家的文件夹中,即C:\cygwin64\home\brittenb\.从那里,我跑了bash autogen.sh,创造了./configure我需要的东西.所以我跑了那个,虽然对支票的一些反应是没有的,但似乎运行正常.然后我跑makemake install.似乎没有什么不合适的地方,所以我的假设是它做了应该做的事情.我不知道从哪里开始.

这是ls我运行一切之后的输出:

aclocal.m4              snappy.cc
AUTHORS                 snappy.h
autogen.sh              snappy.lo
autom4te.cache          snappy.o
ChangeLog               snappy.pc
compile                 snappy.pc.in
config.guess            snappy_unittest.cc
config.h                snappy_unittest.exe
config.h.in             snappy_unittest-snappy_unittest.o
config.log              snappy_unittest-snappy-test.o
config.status           snappy-c.cc
config.sub              snappy-c.h
configure               snappy-c.lo
configure.ac            snappy-c.o
COPYING                 snappy-internal.h
depcomp                 snappy-sinksource.cc
format_description.txt  snappy-sinksource.h
framing_format.txt      snappy-sinksource.lo
INSTALL                 snappy-sinksource.o
install-sh              snappy-stubs-internal.cc
libsnappy.la            snappy-stubs-internal.h
libtool                 snappy-stubs-internal.lo
ltmain.sh               snappy-stubs-internal.o
m4                      snappy-stubs-public.h
Makefile                snappy-stubs-public.h.in
Makefile.am             snappy-test.cc …
Run Code Online (Sandbox Code Playgroud)

bash makefile build

5
推荐指数
1
解决办法
367
查看次数

使用 Python 下载 *.mp4 文件

我正在尝试从网站下载和保存讲座视频。虽然我已成功下载文件,但它们无法在我的媒体播放器中播放。这是我正在使用的代码:

from bs4 import BeautifulSoup
import re
import urllib2

snippet = open('Python/SNA Page Source Revised.txt', 'r')
soup = BeautifulSoup(snippet)

links = [link.get('href') for link in soup.find_all('a')]

videos = []

for link in links:
  match = re.search('.*mp4.*', link)
  if match:
    videos.append(link)

vidNum = 1

for video in videos:
  f = urllib2.urlopen(video)
  with open('Data Analysis/Social Network Analysis/Video '+vidNum+'.mp4', 'wb') as code:
    code.write(f.read())
  vidNum += 1
Run Code Online (Sandbox Code Playgroud)

一切似乎都正常,但是当我尝试播放其中一个视频时,出现此错误:“Python (v2.7) 需要安装插件才能播放以下类型的媒体文件:text/html 解码器”此外,如果我手动从网站下载视频,文件大约为 22.8MB,但是当我使用我的脚本时,文件只有 7.8kB。

我下载文件的方式有问题吗?任何帮助将不胜感激。

另外:我在使用 Python v2.7 的 Ubuntu 12.04 LTS 操作系统上运行。

****编辑 …

python urllib2 beautifulsoup

4
推荐指数
2
解决办法
2万
查看次数

使用gsub()从R中的字母之间删除多余的空格

关于如何从单词之间删除额外的空格,有很多答案,这是非常简单的.但是,我发现单词中删除多余的空格要困难得多.作为一个可重现的例子,假设我有一个如下所示的数据向量:

x <- c("L L C", "P O BOX 123456", "NEW YORK")

我想做的是这样的事情:

y <- gsub("(\\w)(\\s)(\\w)(\\s)", "\\1\\3", x)

但这让我想到了这个:

[1] "LLC" "POBOX 123456" "NEW YORK"

几乎完美,但我真的希望第二个值说"PO BOX 123456".有没有比我正在做的更好的方法呢?

regex r gsub

4
推荐指数
1
解决办法
1366
查看次数

readr :: read_csv("file.csv",col_types = rep("c",times = 18))给出错误:与STRSXP不兼容

我正在尝试读取一个相当简单的csv文件,但readr在我尝试指定列类型时抛出错误.这是我的数据的一小部分:

text <- "Item,Date,Time,SeizureTime,ET,OriginatingNumber,TerminatingNumber,IMEI,IMSI,CT,Feature,DIALED,FORWARDED,TRANSLATED,ORIG_ORIG,MAKE,MODEL,TargetNumber
3,10/31/2012,7:53:00,0:15,1:43,(123)555-1216,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
4,10/31/2011,9:04:00,0:25,0:00,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
9,10/31/2014,9:08:00,0:11,2:13,(123)555-8555,(132)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
12,10/31/2011,9:27:00,0:07,0:10,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
13,10/31/2015,9:35:00,0:27,0:00,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
16,10/31/2011,10:09:00,0:10,14:13,(123)555-1216,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662"

dat <- read.table(text = text, sep = ",", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用实际的CSV读取时,read_csv("file.csv", col_types = rep("c", times = 18))我得到了标题中提到的错误.我已经看到了关于这个错误的几个SO问题,它们似乎都与后台发生的C++函数有关,但我不知道如何解决它.如果我剥离col_types参数,错误消失,但它不能正确解析数据.

csv r readr

4
推荐指数
1
解决办法
953
查看次数

在 RStudio 的查找和替换功能中使用正则表达式将捕获的组替换为小写

我正在尝试将camelCase 变量名称转换为snake_case 并希望使用正则表达式来执行此操作。我认为一个简单的查找[a-z]([A-Z])和替换_$L$1会起作用,但它实际上是将“$L”放入变量名中。RStudio(使用 PERL 引擎进行正则表达式)中用小写字母替换捕获组的方法是什么?

regex rstudio

4
推荐指数
1
解决办法
997
查看次数

将datetime.datetime对象转换为Python中epoch以来的天数

我有一个pandas.Series可能看起来像这样的对象:

import pandas as pd
myVar = pd.Series(["VLADIVOSTOK 690090", "MAHE", NaN, NaN, "VLADIVOSTOK 690090", "2000-07-01 00:00:00"])
Run Code Online (Sandbox Code Playgroud)

myVar[5]datetime.datetime当数据通过Python读入时,被解析为对象pandas.我假设将此值转换为自纪元(36708)以来的天数并不困难.我刚接触Python,不知道该怎么做.提前致谢!

python datetime epoch date-formatting pandas

3
推荐指数
2
解决办法
1万
查看次数