首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从txt文件创建csv文件,并在"x“字符后使用列分隔符

如何从txt文件创建csv文件,并在"x“字符后使用列分隔符
EN

Stack Overflow用户
提问于 2021-01-12 03:25:21
回答 3查看 62关注 0票数 1

我有一个txt文件,如下所示:

代码语言:javascript
复制
MT0111500000000 Anniston-Oxford-Jacksonville, AL Metropolitan Statistical Area
MT0112220000000 Auburn-Opelika, AL Metropolitan Statistical Area  
MT0113820000000 Birmingham-Hoover, AL Metropolitan Statistical Area

我需要从这里创建一个csv文件,我在这方面的经验很少,但我一直在学习和做它,尽管可能效率不高。

我现在的问题是,当我使用pandas时,它会在",“之后创建列。我需要的是左侧代码"MT0113820000000“后面的列分隔符,尽管代码确实发生了变化,但它们的长度都是相同的。

提前谢谢,我知道这是一个很难回答的问题。

下面是我目前的代码:

代码语言:javascript
复制
import pandas as pd

dataframe1 = pd.read_csv("C:/Users/andre/Desktop/bea_api_test/python-bureau-economic-analysis-api-client/testttt/output.txt")  
dataframe1.to_csv('output_.csv', index = None)

和输出:

代码语言:javascript
复制
COLUMN 1                                COLUMN 2
MT0111500000000 Anniston-Oxford-Jacksonville     | AL Metropolitan Statistical Area
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-12 04:14:57

或者,使用上面注释中提到的read_fwf

代码语言:javascript
复制
from io import StringIO
import pandas as pd

testdata = '''\
MT0111500000000 Anniston-Oxford-Jacksonville, AL Metropolitan Statistical Area
MT0112220000000 Auburn-Opelika, AL Metropolitan Statistical Area
MT0113820000000 Birmingham-Hoover, AL Metropolitan Statistical Area
'''

buff = StringIO(testdata)

df = pd.read_fwf(buff, header=None, colspecs=[(0, 15), (16, 64 * 1024)])

print(df.to_csv(index=False, columns=[0, 1], header=['COLUMN1', 'COLUMN2']))
票数 1
EN

Stack Overflow用户

发布于 2021-01-12 04:03:59

这不是CSV,我也看不到说服read_csv做正确事情的便捷方法。幸运的是,这里似乎有一条简单的规则。第一个空格之前的东西,然后是后面的东西。str.split就是这么做的。

代码语言:javascript
复制
import pandas as pd
from pathlib import Path

#in_file = Path("C:/Users/andre/Desktop/bea_api_test/python-bureau-economic-analysis-api-client/testttt/output.txt")
in_file = Path("test.txt")
out_file = in_file.with_name(in_file.stem + "_").with_suffix(".csv")

    # test data
    open(in_file, "w").write("""\
    MT0111500000000 Anniston-Oxford-Jacksonville, AL Metropolitan Statistical Area
    MT0112220000000 Auburn-Opelika, AL Metropolitan Statistical Area  
    MT0113820000000 Birmingham-Hoover, AL Metropolitan Statistical Area""")
    
    # convert to csv
    pd.DataFrame([line.strip().split(" ",1) for line in open(in_file)],
        columns=["COLUMN1", "COLUMN2"]).to_csv(out_file, index=None, headr=False)
    
    # visual verification
    print(open(out_file).read())

输出

代码语言:javascript
复制
MT0111500000000,"Anniston-Oxford-Jacksonville, AL Metropolitan Statistical Area"
MT0112220000000,"Auburn-Opelika, AL Metropolitan Statistical Area"
MT0113820000000,"Birmingham-Hoover, AL Metropolitan Statistical Area"

在本例中,我立即编写了csv,这样数据帧就会自动从内存中删除。您也可以使用CSV模块执行此操作,一次编写一行代码。这将使用较少的内存,因为它不必在内存中保存整个文件。由于csv是标准python库的一部分,因此对pandas没有外部依赖。添加一些文件名处理

代码语言:javascript
复制
import csv
from pathlib import Path

#in_file = Path("C:/Users/andre/Desktop/bea_api_test/python-bureau-economic-analysis-api-client/testttt/output.txt")
in_file = Path("test.txt")
out_file = in_file.with_name(in_file.stem + "_").with_suffix(".csv")

# test data
open(in_file, "w").write("""\
MT0111500000000 Anniston-Oxford-Jacksonville, AL Metropolitan Statistical Area
MT0112220000000 Auburn-Opelika, AL Metropolitan Statistical Area  
MT0113820000000 Birmingham-Hoover, AL Metropolitan Statistical Area""")

# convert to csv
with open(in_file) as infp, open(out_file, "w") as outfp:
    writer = csv.writer(outfp)
    writer.writerows(line.strip().split(" ",1) for line in infp)

# visual verification
print(open(out_file).read())
票数 0
EN

Stack Overflow用户

发布于 2021-01-12 04:53:47

您可以在第一次出现空格时拆分数据:

代码语言:javascript
复制
data = pd.read_table("data.txt", squeeze = True, header = None).str.split(" ", 1)
df = pd.DataFrame(data.tolist(), columns = ["column1", "column2"])

df.to_csv("df.csv")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65673285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档