【问题标题】:writing a text file to a csv file将文本文件写入 csv 文件
【发布时间】:2021-02-18 15:25:17
【问题描述】:

我有一个文本文件,每行包含一个句子。有些行也是空的。

sentence 1
sentence 2
empty line

我想将此文件的内容写入 csv 文件中,使 csv 文件只有一列,并且在每一行中写入相应的句子。这是我尝试过的:

import csv

f = open('data 2.csv', 'w')
with f:
    writer = csv.writer(f)

    for row in open('data.txt', 'r):
        writer.writerow(row)
import pandas as pd
df = pd.read_csv('data 2.csv')

假设我的文本文件中有三个句子,我希望 csv 文件有一列有 3 行。但是,当我运行上面的代码时,我会得到以下输出:

[1 rows x 55 columns]

似乎句子中的每个字符都写在一个单元格中,并且所有句子都写在一行中。我该如何解决这个问题?

【问题讨论】:

    标签: python csv text


    【解决方案1】:

    因此,您希望将文本文件加载到数据框的单列中,每个数据框行一行。可以直接做:

    with open(data.txt) as file:
        df = pd.DataFrame((line.strip() for line in file), columns=['text'])
    

    您甚至可以在读取时使用filter 过滤空行:

    with open(data.txt) as file:
        df = pd.DataFrame(filter(lambda x: len(x) > 0, (line.strip() for line in file)),
                          columns=['text'])
    

    【讨论】:

      【解决方案2】:

      在您的代码中,您遍历文本文件中的每个字符。尝试通过readlines()方法逐行读取:

      import csv
      
      f = open('data 2.csv', 'w')
      with f:
          writer = csv.writer(f)
          text_file = open('data.txt', 'r')
      
          for row in text_file.readlines():
              writer.writerow(row)
      

      【讨论】:

      • 数据量很大,如果我把句子写到一个列表中,列表会变得很大,程序无法处理。
      • 在您的代码中,您遍历文本文件中的每个字符。尝试通过readlines()方法逐行阅读
      • @BNoor:嗯……你以后想把它加载到熊猫数据框中,不是吗?您认为数据框将驻留在哪里?如果列表可以耗尽你的内存,数据框肯定也会这样做!
      • 我想稍后将 csv 文件转换为 tfrecord 数据集。由于体积非常大,我无法将整个数据读取到列表中。
      猜你喜欢
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多