Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将文本文件重新格式化为csv的Python脚本_Python_String_Csv_File Handling - Fatal编程技术网

使用Python将文本文件重新格式化为csv的Python脚本

使用Python将文本文件重新格式化为csv的Python脚本,python,string,csv,file-handling,Python,String,Csv,File Handling,我被要求阅读包含以下内容的文本文件: 1。 邪恶的继母(1989)扮演米兰达 一对夫妇度假回家发现他们的祖父… 2. 由威廉·怀勒(1988)亲自导演 在好莱坞的黄金时代,威廉·怀勒是… 3. 《八月鲸鱼》(1987)中的利比·斯特朗 围绕五个不寻常的老年角色展开的戏剧,其中两个… 4. 当萨默斯去世(1986)时,汉娜·洛夫廷 1959年,在路易斯安那州南部一个沉睡的小镇上,一名律师在搜索… 要创建如下所示的.csv输出文件: 1,《邪恶的继母》,1989年,作为米兰达,一对夫妇度假回家…

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

1。
邪恶的继母(1989)扮演米兰达
一对夫妇度假回家发现他们的祖父…
2.
由威廉·怀勒(1988)亲自导演
在好莱坞的黄金时代,威廉·怀勒是…
3.
《八月鲸鱼》(1987)中的利比·斯特朗
围绕五个不寻常的老年角色展开的戏剧,其中两个…
4.
当萨默斯去世(1986)时,汉娜·洛夫廷
1959年,在路易斯安那州南部一个沉睡的小镇上,一名律师在搜索…
要创建如下所示的.csv输出文件:

1,《邪恶的继母》,1989年,作为米兰达,一对夫妇度假回家…
由威廉·怀勒执导,1988年,作为她自己,在…的黄金时代…
3,《八月的鲸鱼》,1987年,作为利比·斯特朗,戏剧围绕着五个…
我知道,如果我可以将这些行分割开来,那么我就可以将它们再次添加到一起,在它们之间加上逗号,然后将这些字符串写入我的输出文件中。我的问题是格式。对于我只想要的数字:

line1=stringname[0]+','
line2= stringname[:stringname.find('(')-1]+','+stringname[stringname.find('(')+1:stringname.find(')')-1]+','+stringname[stringname.find(')')+1:]
不更改第3行,然后写入文件

result=line1+line2+line3

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

使用正则表达式可以很容易地做到这一点,但我猜您不希望使用它

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

使用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输出文件时在条目之间自动添加必要的逗号。如果条目包含逗号,它将自动添加引号。

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