【问题标题】:Python script for reformatting a text file into a csv using Python使用 Python 将文本文件重新格式化为 csv 的 Python 脚本
【发布时间】:2016-10-17 21:16:02
【问题描述】:

我被要求读入一个包含以下内容的文本文件:

1.

Wicked Stepmother (1989) as Miranda

A couple comes home from vacation to find that their grandfather has …

2.

Directed By William Wyler (1988) as Herself

During the Golden Age of Hollywood, William Wyler was one of the …

3.

Whales of August, The (1987) as Libby Strong

Drama revolving around five unusual elderly characters, two of whom …

4.

As Summers Die (1986) as Hannah Loftin

Set in a sleepy Southern Louisiana town in 1959, a lawyer, searches …

并创建一个如下所示的 .csv 输出文件:

1,Wicked Stepmother ,1989, as Miranda,A couple comes home from vacation …
2,Directed By William Wyler ,1988, as Herself,During the Golden Age of …
3,"Whales of August, The ",1987, as Libby Strong,Drama revolving around five…

我知道,如果我可以将这些行分开,那么我可以将它们重新组合在一起,并在它们之间加上逗号,然后将这些字符串写入我的输出文件中。我的问题是格式。对于我只想要的数字:

line1=stringname[0]+','
line2= stringname[:stringname.find('(')-1]+','+stringname[stringname.find('(')+1:stringname.find(')')-1]+','+stringname[stringname.find(')')+1:]

不改变line3然后写入文件

result=line1+line2+line3

问题是我不知道在任何给定时间我正在解析哪一行。我在想也许在一个 for 循环中可以确保我一次解析 3 行一组的代码,但我不确定如何同时管理文件处理。我也不确定如何防止循环结束程序。

【问题讨论】:

  • 我投票结束这个问题,因为这既不是代码编写也不是教程服务
  • 您需要正则表达式来提取标题、年份和“as”部分。那将是最难的部分。休息是小菜一碟。向我们展示你的尝试。

标签: python string csv file-handling


【解决方案1】:

这可以使用正则表达式轻松完成,但我猜你不希望使用它。

相反,可以通过一次读取一行中的文件并确定该行是否以数字开头,后跟. 来解决问题。如果是,请开始构建行列表,直到找到下一个数字。

使用 Python 的 int() 函数将尝试将字符串转换为数字。 find('.') 函数尝试定位数字的结尾。

如果返回的字符串不是数字,则会引发ValueError 异常。在这种情况下,将该行添加到行列表中。

如果有数字,首先将任何现有条目写入csv 文件,然后开始一个新条目。

最后,不会有最终的数字行来触发下一次写入,因此添加另一个调用以将最后一行写入 csv。

例如:

import csv        

with open('text.txt') as f_input, open('output.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)
    entry = []

    for line in f_input:
        line = line.strip()    # Remove the trailing newline

        if len(line):          # Does the line containing anything?
            try:
                number = int(line[:line.find('.')])

                if len(entry):
                    csv_output.writerow(entry)
                entry = [number]
            except ValueError:
                entry.append(line)

    csv_output.writerow(entry)

Python 的csv 库用于获取一个列表,并在写入 csv 输出文件时自动在条目之间添加必要的逗号。如果条目中包含逗号,则会自动添加引号。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 2016-10-04
    • 2012-11-02
    • 2015-12-07
    • 2021-08-04
    • 2012-06-07
    • 2022-06-11
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多