PYTHON:如何使用 Python 中的 raw_input 将 .txt 文件作为用户的输入,然后按行读取该文件?

2024-02-02

我想通过以下方式获取 .txt 文件作为用户的输入raw_input.

输入完成后,我希望访问用户给出的 txt 文件名,并将其内容写入另一个文件(每个文件位于下一行)。

我在如何连接上面的 a 和 b 或如何将原始输入与文件读取链接起来时遇到问题。我需要帮助...代码如下(但它是错误的:S)。

import sys,os,csv

x = raw_input("Enter name of file to be written row wise:")
ui = "x" + txt
for ui in x:
    data = open("ui").readlines()
    outfile = open("myfile.csv","w")
    out = csv.writer(outfile)
for row in data:
    row = row.strip().split(';')
    if row:
        for subrow in row:
            subrow = subrow.strip().split()
            if subrow:
                out.writerow(subrow)
outfile.close()

我收到错误:

无法连接“str”和“list”对象


for row in data: 
    row = row.strip().split(';')

你执行的事实split(';')结果是一行(你应该写:line)根据';'分割总是给出一个非空列表,即使它是一个空行,甚至在被删除之后strip() : ''.split(';') gives ['']。所以你的以下情况if row:是没用的。

这意味着您的代码相当于:

for row in data:
    row = row.strip().split(';')
    for subrow in row:
        subrow = subrow.split()
        if subrow:
            out.writerow(subrow)

然后到:

for row in data:
    for subrow in  row.strip().split(';'):
        subrow = subrow.split()
        if subrow:
            out.writerow(subrow)

.

此外,事实上您使用split() on subrow存在于列表中row.strip().split(';')消除中每个单词之前和之后的所有空格subrow。所以第一个strip() in row.strip().split(';')也是没用的。

那么您的代码相当于:

for row in data:
    for subrow in row.split(';'):
        subrow = subrow.split()
        if subrow:
            out.writerow(subrow)

Now , subrow.split()当子行仅为空白时,可以产生一个空列表,因为split()无参数有其特殊的算法。所以指令if subrow很有用。

.

事实上,在读取这样一个文件的内容之后,您的代码所做的是:

Blackcurrant, Redcurrant   ;  Orange ; Blueberry
    Pear;Chestnut;     Lemon Lime, Grapefruit
Apple;Apricot   ;  Pineapple, Fig; Mulberry, Hedge Apple

记录另一个文件,如下所示:

Blackcurrant
Redcurrant
Orange
Blueberry
Pear
Chestnut
Lemon Lime
Grapefruit
Apple
Apricot
Pineapple
Fig
Mulberry
Hedge
Apple

我更喜欢下面的代码来做到这一点:

filename = raw_input("Enter name of file to be written row wise:") + '.txt'
filepath = 'I:\\' + filename

with open(filepath) as handler,open("myfile.csv","wb") as outfile:
    out = csv.writer(outfile)
    for row in handler:
        gen = ( subrow.split() for subrow in row.split(';') )
        out.writerow([x for x in gen if x])
    del out

.

该代码将始终运行,即使对于内存无法容纳其内容的极其巨大的文件,因为文件的行是一个接一个地读取的。

如果文件不是那么大,可以像您一样继续,使用读取行():

with open(filepath) as handler:
    data = handler.readlines()

with open("myfile.csv","wb") as outfile:
    out = csv.writer(outfile)
    for row in data:
        gen = ( subrow.split() for subrow in row.split(';') )
        out.writerow([x for x in gen if x])
    del out

但没有特别的兴趣继续,所以,你可以这样做for row in handler以及。

.

就我个人而言,我认为使用 writerows() 会更好:

filename = raw_input("Enter name of file to be written row wise:") + '.txt'
filepath = 'I:\\' + filename

with open(filepath) as handler,open("myfile.csv","wb") as outfile:
    out = csv.writer(outfile)
    gen = ( x for row in handler for x in (subrow.split() for subrow in row.split(';')) )
    out.writerows([x for x in gen if])
    del out

.

我通过告诉您使用正则表达式的代码会更加有效来结束这个答案:

import csv, re

regx = re.compile('[ ;\r\n]+')

filename = raw_input("Enter name of file to be written row wise:") + '.txt'
filepath = 'I:\\' + filename

with open(filepath) as handler,open("myfile.txt","w") as outfile:
    outfile.write('\n'.join(x for x in regx.split(handler.read()) if x))

Edit 1

handler = open(filepath)
outfile = open("myfile.txt","wb")
out = csv.writer(outfile)
for row in handler:
    gen = ( subrow.split() for subrow in row.split(';') )
    out.writerow([x for x in gen if x])
del out
outfile.close()
handler.close()

or

import csv, re
regx = re.compile('[ ;\r\n]+')
filename = raw_input("Enter name of file to be written row wise:") + '.txt'
filepath = 'I:\\' + filename

handler = open(filepath)
outfile = open("myfile.txt","w") 
outfile.write('\n'.join(x for x in regx.split(handler.read()) if x))
outfile.close()
handler.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PYTHON:如何使用 Python 中的 raw_input 将 .txt 文件作为用户的输入,然后按行读取该文件? 的相关文章

  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐