将多个 txt 转换为 csv 而不会丢失数据
Convert multiple txt to csv without data loss
免责声明:我是 Python 新手,非常感谢详细的解答。
更新:删除了不相关的代码。
更新:问题是每个单元格的字符串限制 Excel。我根据下面提出的解决方案提供了自己的解决方案。
我想将多个 .txt 文件逐行合并为一个 .csv 文件。这是一些 replication data。
尝试的输出文件是 data_replication.csv
。如您所见,五个 .txt 文件中只有两个成功集成到 .csv 文件中。在那里,您还可以找到 .pdf 格式的输入文件。这是我在 Google Scholar.
上找到的非结构化随机论文
我使用的函数是 Bill Bell 在 中提出的。
我用于从 .pdf 转换为 .txt 的函数是针对类似问题提出的 b hkr 'Convert a PDF files to TXT files':
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 提议的函数作为蓝图,我为遭受相同约束的人们创建了以下函数: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')
免责声明:我是 Python 新手,非常感谢详细的解答。
更新:删除了不相关的代码。
更新:问题是每个单元格的字符串限制 Excel。我根据下面提出的解决方案提供了自己的解决方案。
我想将多个 .txt 文件逐行合并为一个 .csv 文件。这是一些 replication data。
尝试的输出文件是 data_replication.csv
。如您所见,五个 .txt 文件中只有两个成功集成到 .csv 文件中。在那里,您还可以找到 .pdf 格式的输入文件。这是我在 Google Scholar.
我使用的函数是 Bill Bell 在
我用于从 .pdf 转换为 .txt 的函数是针对类似问题提出的 b hkr 'Convert a PDF files to TXT files':
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 提议的函数作为蓝图,我为遭受相同约束的人们创建了以下函数: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')