打开和处理文件中的文本

我在计算文本文件中文本的不同百分比时遇到问题。以下是我的代码。我会感激任何帮助的,谢谢。

选择 | 换行 | 行号
  1. def pecent (pento):
  2.     pento = x/100 * filename
  3.     text = open ("C:\\fname.txt", 'r')
  4.     filename = text.split()
  5.     x = [10, 20, 30, 40, 50, 60, 70, 80, 90]
  6.     for z in x:
  7.        print pento
# 回答1


在您的第一行代码中:
Pento=x/100*文件名
X

文件名
都是未定义的。
# 回答2


将一个文件名(我假设它是一个字符串)乘以一个数字也没有意义。
# 回答3


嗨,兔子,你是对的,我正在试着用一个数字来乘一个字符串。我遇到了一些与首先转换为浮点数b4乘法有关的事情,但我正在尝试如何进行这种转换。有什么主意吗?
# 回答4


在bvdet中,x是一个数字,而filename是一个字符序列(字符串)。我必须明确地定义它们吗?
# 回答5


Python有特定的作用域规则。请参阅Python文档
这里
。"x"和"filename"必须在某个地方定义。

选择 | 换行 | 行号
  1. >>> x = 1000
  2. >>> s = "ABC"
  3. >>> def pecent(): # it makes no sense for pento to be an argument then define it on the next line
  4. ...     pento = x/100*s
  5. ...     print pento
  6. ...     
  7. >>> pecent()
  8. ABCABCABCABCABCABCABCABCABCABC
  9. >>>
# 回答6


嗨,bvdet,谢谢你的回复。你真的帮了我大忙。您的代码起作用了,但只有当x等于或大于100时才起作用。它不能分割文本(不能产生90%、80%、-10%的文本)。此外,我想循环通过,以获得上述比例的文本。我一直收到以下错误:TypeError:不支持/:'list'和'int'的操作数类型。下面是我的代码行。

选择 | 换行 | 行号
  1. x = range (10,100, 10)
  2. f=open ("C:\predator4.txt", 'r')
  3. s = f.read()
  4. def pecent():
  5.     pento = x/100*s
  6.     for z in x:
  7.         print pento
  8. pecent() 
# 回答7


如果您运行的是Python2.x而不是3.x,则Divide返回一个int。您必须通过提供至少一个浮点数来告诉它使用浮点数。

选择 | 换行 | 行号
  1.     pento = x/100.0*s     ## 100.0 = float
  2. ## or
  3.     pento = x/float(100)*s  ## float(100) cast to float 
# 回答8


大家好,很抱歉,我不能及时传达上述解决方案的结果。我尝试按照您的建议使用Float,但仍然收到相同的错误消息。你能不能试一下文本文档上的代码,看看能不能用?如果运行正常,请让我知道您使用的是哪个版本的PYTHON。先谢谢你。
# 回答9


也许你想做这样的事情:

选择 | 换行 | 行号
  1. def text_percent(fn, percentage=100.):
  2.     text = open(fn).read()
  3.     pt = percentage/100.
  4.     return text[:int(pt*len(text))]
  5.  
  6. print text_percent("text.txt", 20)
# 回答10


嗨,bvdet,谢谢你的回复。您的解决方案运行良好。我还有一个问题要问您:我如何创建一个循环,使我能够一次计算文档中文本的10%、20%、.....、90%,而不是每次只计算一个百分比?
谢谢你,伙计。
# 回答11

选择 | 换行 | 行号
  1. for percentage in range(10, 100, 10):
  2.     print text_percent("text.txt", percentage)

理想情况下,您只需打开文件一次,然后在循环中完成所有计算。

选择 | 换行 | 行号
  1. def text_percent(fn, *percentages):
  2.     text = open(fn).read()
  3.     return [text[:int(pt/100.*len(text))] for pt in percentages]
  4.  
  5. print "\n\n".join(text_percent("text.txt", 10, 20, 30))

标签: python

添加新评论