繁体   English   中英

将多个txt转换成csv不丢失数据

[英]Convert multiple txt to csv without data loss

免责声明:我是 Python 新手,非常感谢详细的答案。

更新:删除了不相关的代码。

更新:问题是每个单元格的字符串 Excel 限制。 我根据以下建议的解决方案提供了自己的解决方案。

我想将多个 .txt 文件逐行合并到一个 .csv 文件中。 这是一些复制数据 尝试的 output 文件是data_replication.csv 如您所见,五个.txt 文件中只有两个成功集成到.csv 文件中。 在那里,您还可以找到 .pdf 格式的输入文件。 这是我在 Google Scholar 上找到的非结构化随机论文。

我使用的 function 是 Bill Bell 在“将文本文件的文件夹组合成 CSV 与单元格中的每个内容”中提出的

function 我用于从.pdf 到.txt 的转换是由hkr 提出的类似问题'Convert a PDF'文件到TXT 文件

def txt_to_csv(x): 

    os.chdir('/content/drive/MyDrive/ThesisAllocationSystem/' + x)

    with open(x + '.csv', 'w', encoding = 'Latin-1') as out_file:
        csv_out = csv.writer(out_file)
        csv_out.writerow(['FileName', 'Content'])
        for fileName in Path('.').glob('*.txt'):
            lines = [ ]
            with open(str(fileName.absolute()),'rb') as one_text:
                for line in one_text.readlines():
                    lines.append(line.decode(encoding='Latin-1',errors='ignore').strip())
            csv_out.writerow([str(fileName),' '.join(lines)])

txt_to_csv('data_replication')

我猜数据类型可能是这里的问题,并感谢任何帮助我的尝试。

您可以为此使用pandas

from glob import glob
import pandas as pd

files = glob('/content/drive/MyDrive/ThesisAllocationSystem/*.txt') # create list of text files
data = [[i, open(i, 'rb').read()] for i in files] # create a list of lists with file names and texts
df = pd.DataFrame(data, columns=['FileName', 'Content']) # load the data in a pandas dataframe
df.to_csv('data_replication.csv') # save to csv

使用 RJ Adriaansen 提出的 function 作为蓝图,我为遭受相同约束的人创建了以下 function:Excel 对每个单元格字符串的硬限制:32767。

一种方法是放弃字符串内容超过 33k 的文档。 但是,在我的情况下,这会导致大量数据丢失。

相反,我将文档切分为 32767 个字符串。

from glob import glob
import pandas as pd

def txt_to_csv(input_dir, output_dir, new_filename): 
  
  files = glob('/content/drive/MyDrive/ThesisAllocationSystem/' + input_dir + '/*.txt')
  data = [[i, open(i, 'rb').read()] for i in files]
  df = pd.DataFrame(data, columns = ['FileName', 'Content'])
  df['Content'] = df['Content'].str.slice(start = 0, stop = 32767) # Upper limit of strings per cell in csv
  df.to_csv(output_dir + '/' + new_filename + '.csv', index = False)

txt_to_csv('data_replication', 'data_replication', 'trial')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM