使用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”部分。这将是最困难的部分。休息是小菜一碟。让我们看看你的尝试。