如何将数据从csv复制到txt中的特定位置

时间:2018-01-28 17:47:56

标签: python-2.7 csv

我得到一个包含几列的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,依此类推。有办法吗?

1 个答案:

答案 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列表是为其他目的而创建的。

通过这个,程序读取输入文件并将其分成三个列表 - 一个包含整个内容,第二个只包含数字(用于问题后面部分的目录命名),第三个只包含文本。它一次读取整个输出文件。它会找到您要保留的边界线的索引,bfaf。它再次打开输出文件,并将内容写入bf包括在内。然后,它从af开始编写新内容,最后写入旧内容。请注意,next()实际上对我有用,而您的版本没有 - 我正在使用Python 2.7。