我得到一个包含几列的csv文件,但我只对列nr 2和3感兴趣。 csv文件如下所示:
ID,summary
15675,some summary
15678,some other summary
and so on
我需要将这些列复制到特定位置的现有txt文件中:
Some text before
this_text_is_supposed_to_be_replaced_with_csv_data
some text after
我期望的输出是txt文件,如下所示:
some text before
15675,some summary
15678,some other summary
some text after
我认为可以使用re.findall完成,但我不知道如何将从csv中提取的数据存储在变量中并用它替换txt文件中的占位符。 我已经提出了一段代码,它将我感兴趣的列提取到一个新的txt文件中,但我不知道如何将它们复制到我所拥有的那些:
import csv
csv_file= "C:\\some\\url\\Desktop\\test.csv"
txt_file="C:\\some\\url\\Desktop\\test.txt"
text_list = []
with open(csv_file, "r") as my_input_file:
my_input_file.__next__()
for line in my_input_file:
line = line.split(",", 2)
text_list.append(" ".join(line[1:]))
with open(txt_file, "a") as my_output_file:
for line in text_list:
my_output_file.write(line)
我想要实现的另一件事是为我在csv文件中从第2列获得的每个ID创建目录,前缀为1_133345,2_234355,依此类推。有办法吗?
答案 0 :(得分:0)
无法更改文件 - 除非您要替换通常不是这种情况的完全相同数量的数据。因此,您需要读取输出文件,更改它,然后覆盖它。有很多方法可以做到这一点,这是其中之一
import csv
# Files
csv_file= "test.csv"
txt_file="test.txt"
# Lines to match
before = "Some text before\n"
after = "some text after\n"
# Read the input file
whole_text = []
text_list = []
numbers = []
with open(csv_file, "r") as my_input_file:
next(my_input_file)
for line in my_input_file:
whole_text.append(line)
line = line.split(",", 2)
numbers.append(line[:1])
text_list.append(" ".join(line[1:]))
# Read the output file
with open(txt_file, "r") as my_output_file:
lines = my_output_file.readlines()
# Write the changed output file
bf = lines.index(before)
af = lines.index(after)
with open("test.txt", "w") as my_output_file:
my_output_file.write("".join(lines[:bf+1]))
my_output_file.write("".join(whole_text))
my_output_file.write("".join(lines[af:]))
该计划基于以下几个假设:
text_list
列表是为其他目的而创建的。通过这个,程序读取输入文件并将其分成三个列表 - 一个包含整个内容,第二个只包含数字(用于问题后面部分的目录命名),第三个只包含文本。它一次读取整个输出文件。它会找到您要保留的边界线的索引,bf
和af
。它再次打开输出文件,并将内容写入bf
包括在内。然后,它从af
开始编写新内容,最后写入旧内容。请注意,next()
实际上对我有用,而您的版本没有 - 我正在使用Python 2.7。