将一系列字符串(加上数字)写入一行csv

约翰·劳顿

这不是漂亮的代码,但是我有一些代码,抓住一系列串出一个HTML文件,并给了我一系列字符串:authortitledatelengthtext我有2000多个html文件,我想浏览所有这些文件并将此数据写入单个csv文件。我知道所有这些最终都将被包装成一个for循环,但是在此之前,我很难理解如何从获取这些值到将它们写入一个csv文件。我的想法是先创建一个列表或元组,然后将其写入csv文件中的一行:

the_file = "/Users/john/Code/tedtalks/test/transcript?language=en.0"
holding = soup(open(the_file).read(), "lxml")
at = holding.find("title").text
author = at[0:at.find(':')]
title  = at[at.find(":")+1 : at.find("|") ]
date = re.sub('[^a-zA-Z0-9]',' ', holding.select_one("span.meta__val").text)
length_data = holding.find_all('data', {'class' : 'talk-transcript__para__time'})
(m, s) = ([x.get_text().strip("\n\r") 
      for x in length_data if re.search(r"(?s)\d{2}:\d{2}", 
                                        x.get_text().strip("\n\r"))][-1]).split(':')
length = int(m) * 60 + int(s)
firstpass = re.sub(r'\([^)]*\)', '', holding.find('div', class_ = 'talk-transcript__body').text)
text = re.sub('[^a-zA-Z\.\']',' ', firstpass)
data = ([author].join() + [title] + [date] + [length] + [text])
with open("./output.csv", "w") as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in data:
            writer.writerow(line)

我一辈子都无法弄清楚如何让Python尊重这些事实,即它们是字符串,应该存储为字符串而不是字母列表。.join()以上是我试图解决的问题。)

展望未来:以这种方式处理2000个文件,将其剥离为我想要的并一次写入CSV的一行是更好/更有效的方法,还是先建立一个数据帧pandas然后将其写入CSV更好(所有2000个文件= 160MB,因此精简后,最终数据不能超过100MB,因此此处没有足够的大小,但期待大小最终可能会成为一个问题。)

帕德拉克·坎宁安(Padraic Cunningham)

这将抓取所有文件并将数据放入csv中,您只需要将路径传递到包含html文件和输出文件名称的文件夹:

import re
import csv
import os
from bs4 import BeautifulSoup
from glob import iglob


def parse(soup):
    # both title and author are can be parsed in separate tags.
    author = soup.select_one("h4.h12.talk-link__speaker").text
    title = soup.select_one("h4.h9.m5").text
    # just need to strip the text from the date string, no regex needed.
    date = soup.select_one("span.meta__val").text.strip()
    # we want the last time which is the talk-transcript__para__time previous to the footer.
    mn, sec = map(int, soup.select_one("footer.footer").find_previous("data", {
        "class": "talk-transcript__para__time"}).text.split(":"))
    length = (mn * 60 + sec)
    # to ignore time etc.. we can just pull from the actual text fragment and remove noise i.e (Applause).
    text = re.sub(r'\([^)]*\)',"", " ".join(d.text for d in soup.select("span.talk-transcript__fragment")))
    return author.strip(), title.strip(), date, length, re.sub('[^a-zA-Z\.\']', ' ', text)

def to_csv(patt, out):
    # open file to write to.
    with open(out, "w") as out:
        # create csv.writer.
        wr = csv.writer(out)
        # write our headers.
        wr.writerow(["author", "title", "date", "length", "text"])
        # get all our html files.
        for html in iglob(patt):
            with open(html, as f:
                # parse the file are write the data to a row.
                wr.writerow(parse(BeautifulSoup(f, "lxml")))

to_csv("./test/*.html","output.csv")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用 C 将一系列数字写入文件

来自分类Dev

grep一个字符串,后跟一系列数字

来自分类Dev

sed可在一系列线路加上一行线路上运行

来自分类Dev

从字符串中提取一系列参考数字

来自分类Dev

LINQ:将一系列字符串折叠为一组“范围”

来自分类Dev

将一系列数字分成不同的行 - Pandas

来自分类Dev

Python 3:如何将字符串拆分为一系列字符?

来自分类Dev

如何将一系列bash命令定义为字符串?

来自分类Dev

将一系列字符串转换为数组并替换值

来自分类Dev

如何将一系列键替换为使用 javascript 显示的字符串?

来自分类Dev

使用字符串循环遍历一系列行

来自分类Dev

如何将一系列混合的文本和数字值转换为具有连续数字值相加的单个字符串?

来自分类Dev

使用一个错位的字符串打印一系列字符串

来自分类Dev

从红宝石中的一系列字符串数组中获取一组数字

来自分类Dev

如何从数据帧每一行的一系列数字中选择特定值

来自分类Dev

如何批量从一系列字符串的左侧修剪字符串?

来自分类Dev

包含一系列子字符串的字符串的聚合计数

来自分类Dev

Python将一系列数字之间的文本行写入新文件

来自分类Dev

将文件的每一行保存到一系列文件的 Bash 脚本?

来自分类Dev

根据JavaScript中的长度将字符串转换为一系列下划线

来自分类Dev

powershell从字符串中提取一系列文本作为一个输出

来自分类Dev

实现规范设计模式以检查一系列字符串属性

来自分类Dev

Spreadsheetgear-获取一系列单元格的字符串表示形式

来自分类Dev

计算C中一系列字符串中的元音数量

来自分类Dev

如何根据Google表格中的一系列值动态创建字符串

来自分类Dev

在一系列列表中重新分配字符串值

来自分类Dev

尝试通过数组连接一系列字符串

来自分类Dev

从一系列列中的字符串中删除不需要的部分

来自分类Dev

从一系列字符串调用类内的方法

Related 相关文章

  1. 1

    用 C 将一系列数字写入文件

  2. 2

    grep一个字符串,后跟一系列数字

  3. 3

    sed可在一系列线路加上一行线路上运行

  4. 4

    从字符串中提取一系列参考数字

  5. 5

    LINQ:将一系列字符串折叠为一组“范围”

  6. 6

    将一系列数字分成不同的行 - Pandas

  7. 7

    Python 3:如何将字符串拆分为一系列字符?

  8. 8

    如何将一系列bash命令定义为字符串?

  9. 9

    将一系列字符串转换为数组并替换值

  10. 10

    如何将一系列键替换为使用 javascript 显示的字符串?

  11. 11

    使用字符串循环遍历一系列行

  12. 12

    如何将一系列混合的文本和数字值转换为具有连续数字值相加的单个字符串?

  13. 13

    使用一个错位的字符串打印一系列字符串

  14. 14

    从红宝石中的一系列字符串数组中获取一组数字

  15. 15

    如何从数据帧每一行的一系列数字中选择特定值

  16. 16

    如何批量从一系列字符串的左侧修剪字符串?

  17. 17

    包含一系列子字符串的字符串的聚合计数

  18. 18

    Python将一系列数字之间的文本行写入新文件

  19. 19

    将文件的每一行保存到一系列文件的 Bash 脚本?

  20. 20

    根据JavaScript中的长度将字符串转换为一系列下划线

  21. 21

    powershell从字符串中提取一系列文本作为一个输出

  22. 22

    实现规范设计模式以检查一系列字符串属性

  23. 23

    Spreadsheetgear-获取一系列单元格的字符串表示形式

  24. 24

    计算C中一系列字符串中的元音数量

  25. 25

    如何根据Google表格中的一系列值动态创建字符串

  26. 26

    在一系列列表中重新分配字符串值

  27. 27

    尝试通过数组连接一系列字符串

  28. 28

    从一系列列中的字符串中删除不需要的部分

  29. 29

    从一系列字符串调用类内的方法

热门标签

归档